2010-02-09 30 views

回答

4

Chandru的答案中的例子看起来像很多代码,所以我可以理解你为什么要求更简单的解决方案。但是,如果您子类DefaultListCellRenderer很多工作都是为您完成的,因为此渲染器是JLabel的子类。

JList list = ... // Create JList 

// Install custom renderer. 
list.setCellRenderer(new DefaultListCellRenderer() { 
    public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { 

    // Request superclass to render the JLabel. 
    Component ret = super.getListCellRenderer(list, value, index, isSelected, cellHasFocus); 

    // Now conditionally override background if cell isn't selected. 
    if (!isSelected) { 
     String s = String.valueOf(value); 

     if (s.equals("Foo")) { 
     ret.setBackground(Color.RED); 
     } else { 
     ret.setBackground(Color.GREEN); 
     } 
    } 

    return ret; 
    } 
}); 
+0

谢谢我会试试这个 – Mandar 2010-02-09 13:24:58

+0

如果你愿意,你可以把这个答案(和一些其他答案)upvote。 – Adamski 2010-02-09 14:56:59

1

您必须使用自定义列表单元格渲染器。例如,查看this how-to

+0

请问您能详细说明一下吗? – Mandar 2010-02-09 12:59:36

+0

我编辑了我的回复。 – 2010-02-09 13:00:19

+0

感谢您的回复。 但是有没有更简单的方法? 我试过每个addItem()之后的setForeground(),但它不起作用。 我不知道为什么。 – Mandar 2010-02-09 13:05:06

相关问题