2013-02-22 24 views
1

早上好,请,你能介意帮我确定为什么这ListCellRenderer类不设置在组合框单元的图像图标: 这里的ListCellRenderer类:的JComboBox文字和ImageIcon的

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

重耦合,在现实生活中没有这样做。不要为此使用'索引'... – Mordechai 2013-02-22 09:28:26

回答

2

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

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

和它工作正常

1
"/pics/Color-icon.png" 

这是否存在? ImageIcon如果无法加载图像,则不会抛出任何异常,但会返回null

+0

它不为空我跟踪它 – 2013-02-22 09:36:54

1
  1. 不提供FileIO专注里面XxxRenderer,加载所有图标给局部变量,测试空值

  2. XxxRenderer发射了大量的事件(鼠标,按键和内部的API实现),那么你飞重建图标

  3. 阅读Oracle tutorial about JComboBox,尽量约similair问题的代码示例

+0

所以你解决了问题的效率,现在呢? – Mordechai 2013-02-22 09:30:58

+0

@ĎMouseEvent现在是什么?是不是从教程如此接近的代码.... – mKorbel 2013-02-22 12:46:34