我重写ListCellRenderer类,继承JPanel。
在JPanel中添加一个JLabel用于显示list中的索引。但是设置setText(String.valueOf(index))之后显示的值都为0.如果用控制台直接输入index又是对的,请问有没有大神知道为什么,感觉涉及了内存的问题?
代码如下:
@Override
public Component getListCellRendererComponent(JList<? extends Vehicle> list, Vehicle value, int index,
boolean isSelected, boolean cellHasFocus) {
// 绘制图标
JLabel iconLabel = new JLabel();
// 绘制车位号
JLabel numLabel = new JLabel();
// 绘制车牌号,没有显示位空车位
JLabel vehicleNumber = new JLabel();
if (value.isIsInParking()) {
iconLabel.setIcon(iconNotNull);
} else {
iconLabel.setIcon(iconNull);
}
JPanel temp1 = new JPanel(new FlowLayout());
temp1.setPreferredSize(new Dimension(50, 50));
temp1.add(iconLabel);
temp1.setBackground(CellColr);
String num = new String(String.valueOf(index));
numLabel.setText(num); //显示出来为0
System.out.println(num); //正常显示0 1 2 3 4 ...
// numLabel.setText(String.valueOf(num) + "号车位");
vehicleNumber.setText(value.getLicensePlateNumber());
numLabel.setForeground(Color.orange);
vehicleNumber.setForeground(Color.orange);
numLabel.setFont(font);
vehicleNumber.setFont(font);
JPanel temp2 = new JPanel(new FlowLayout());
Box box = Box.createVerticalBox();
box.add(numLabel);
box.add(Box.createVerticalStrut(8));
box.add(vehicleNumber);
temp2.setBackground(CellColr);
temp2.add(box);
add(temp1, BorderLayout.WEST);
add(temp2, BorderLayout.CENTER);
return this;
}
BUG图:
谢谢了。
闭关修行中......