2

早上好,请您介意帮助我确定为什么这个 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);
}
4

3 回答 3

3

似乎label.setIcon(new ImageIcon("/pics/Color-icon.png"));没有得到图标的实际路径,因为它总是返回 null,但它不会引发异常。所以我试着用这个:

java.net.URL imgURL = getClass().getResource("/pics/Color-icon.png");
label.setIcon(icon);

它工作正常

于 2013-02-22T15:08:42.653 回答
1
"/pics/Color-icon.png"

这存在吗?ImageIcon如果加载图像失败,不会抛出任何异常,但会返回null.

于 2013-02-22T09:26:33.350 回答
1
  1. 不要在 XxxRenderer 中提供 FileIO,将所有图标加载到局部变量,测试空值

  2. XxxRenderer 触发大量事件(鼠标、键和内部在 API 中实现),然后您重新创建了 Icon on fly

  3. 阅读有关 JComboBox 的 Oracle 教程,尝试有关类似问题的代码示例

于 2013-02-22T09:28:41.870 回答