import java.awt.*;
import javax.swing.*;public class Test extends JFrame{
public Test(){
int number = 15;
JPanel mainPanel = new JPanel();
mainPanel.setLayout(new BorderLayout());
JLabel[] label = new JLabel[number];
for(int i = 0; i < number; i++){
if(i % 2 == 0){
label[i] = new JLabel("123gfdgdg");
}else{
label[i] = new JLabel("你好吗?");
}
label[i].setOpaque(false);
}
JList list = new JList(label);
list.setCellRenderer(new MyCellRenderer());
JScrollPane scrollPane = new JScrollPane(list);
mainPanel.add(scrollPane,BorderLayout.CENTER);
this.setPreferredSize(new Dimension(350,300));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
getContentPane().add(mainPanel);
pack();
setVisible(true);
}
public static void main(String[] args){
new Test();
}
private class MyCellRenderer extends JPanel implements ListCellRenderer {
public Component getListCellRendererComponent(JList list,
Object value,
int index,
boolean isSelected,
boolean cellHasFocus) {
setOpaque(false);
setLayout(new BorderLayout());
add((JLabel)value);
if(isSelected){
setBackground(list.getSelectionBackground());
}else{
setBackground(list.getBackground());
}
return this;
}
}
}
为什么显示出来的字体会重在一起的?
import java.awt.Component;
import java.awt.Dimension;import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ListCellRenderer;public class Test extends JFrame{
public Test(){
int number = 15;
JPanel mainPanel = new JPanel();
mainPanel.setLayout(new BorderLayout());
String[] label = new String[number];
for(int i = 0; i < number; i++){
if(i % 2 == 0){
label[i] = new String("123gfdgdg");
}else{
label[i] = new String("Hello");
}
}
JList list = new JList(label);
list.setCellRenderer(new MyCellRenderer());
JScrollPane scrollPane = new JScrollPane(list);
mainPanel.add(scrollPane,BorderLayout.CENTER);
this.setPreferredSize(new Dimension(350,300));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
getContentPane().add(mainPanel);
pack();
setVisible(true);
}
public static void main(String[] args){
new Test();
}
private class MyCellRenderer extends JLabel implements ListCellRenderer {
public Component getListCellRendererComponent(JList list,
Object value,
int index,
boolean isSelected,
boolean cellHasFocus) {
setOpaque(false);
setLayout(new BorderLayout());
setText(value.toString());
if(isSelected){
setBackground(list.getSelectionBackground());
}else{
setBackground(list.getBackground());
}
return this;
}
}
}
{
private JLabel label = new JLabel();
public Component getListCellRendererComponent(JList list,
Object value,
int index,
boolean isSelected,
boolean cellHasFocus)
{ setOpaque(false);
setLayout(new BorderLayout());
this.label.setText(((JLabel) value).getText());
add(this.label);
if (isSelected)
{
setBackground(list.getSelectionBackground());
}
else
{
setBackground(list.getBackground());
} return this;
}
}
{
label[i] = new JLabel("123gfdgdg");
}
else
{
label[i] = new JLabel(" 你好吗?");
}
label[i].setOpaque(false);
加点空格就好了,标签和内容覆盖了
import java.awt.Component;
import java.awt.Dimension;import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ListCellRenderer;public class Test extends JFrame{
public Test(){
int number = 15;
JPanel mainPanel = new JPanel();
mainPanel.setLayout(new BorderLayout());
JPanel[] panels = new JPanel[number];
JLabel[] label = new JLabel[number];
for(int i = 0; i < number; i++){
if(i % 2 == 0){
label[i] = new JLabel("123gfdgdg");
}else{
label[i] = new JLabel("Hello");
}
label[i].setOpaque(false);
panels[i] = new MyPanel();
panels[i].add(label[i]);
}
JList list = new JList(panels);
//list.setCellRenderer(new MyCellRenderer());
JScrollPane scrollPane = new JScrollPane(list);
mainPanel.add(scrollPane,BorderLayout.CENTER);
this.setPreferredSize(new Dimension(350,300));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
getContentPane().add(mainPanel);
pack();
setVisible(true);
}
public static void main(String[] args){
new Test();
}
// private class MyCellRenderer extends JPanel implements ListCellRenderer {
//
// public Component getListCellRendererComponent(JList list,
// Object value,
// int index,
// boolean isSelected,
// boolean cellHasFocus) {
//
// setOpaque(false);
// setLayout(new BorderLayout());
// add((JLabel)value);
//
//
//
//
// if(isSelected){
// setBackground(list.getSelectionBackground());
// }else{
// setBackground(list.getBackground());
// }
// return this;
// }
// }
private class MyPanel extends JPanel{
MyPanel(){
super();
}
public String toString(){
JLabel label = (JLabel)getComponent(0);
return label.getText();
}
}
}
看看符合你的要求不。不过你要在panel中加其他组件 还要用到 renderer.