早上好,拜托,您能不能帮我确定为什么这个ListCellRenderer类没有在组合框单元格中设置图像图标: 这是ListCellRenderer类:
class MyComboRendere implements ListCellRenderer {
public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus) {
JLabel label = new JLabel();
label.setOpaque(true);
label.setText(value.toString());
label.setIcon(new ImageIcon("/pics/Color-icon.png"));
if (isSelected)
if (index == 0)
label.setBackground(Color.RED);
else if (index == 1)
label.setBackground(Color.GREEN);
else
label.setBackground(Color.BLUE);
return label;
}
}
这是设置组合框的方法:
public void setComboColor(){
Vector<String> colors=new Vector<>();
comboPanel=new JPanel(new BorderLayout());
colors.add("RED");
colors.add("GREEN");
colors.add("BLUE");
colorCombo=new JComboBox(colors);
colorCombo.setRenderer(new MyComboRendere());
comboPanel.add(colorCombo,BorderLayout.BEFORE_FIRST_LINE);
}
答案 0 :(得分:2)
似乎label.setIcon(new ImageIcon("/pics/Color-icon.png"));
没有得到图标的实际路径,因为它总是返回null,但它不会抛出异常。所以我试着用这个:
java.net.URL imgURL = getClass().getResource("/pics/Color-icon.png");
label.setIcon(icon);
它运作正常
答案 1 :(得分:1)
"/pics/Color-icon.png"
这是否存在? ImageIcon
如果无法加载图片,则不会抛出任何异常,但会返回null
。
答案 2 :(得分:1)
不要在XxxRenderer中提供FileIO,将所有图标加载到局部变量,测试空值
XxxRenderer触发了很多事件(鼠标,键和内部在API中实现),然后你在飞行中重新创建了Icon
阅读Oracle tutorial about JComboBox,尝试有关similair问题的代码示例