2010-02-09 8 views

ответ

4

Пример в ответе Чандру выглядит как много кода, поэтому я могу понять, почему вы просите о более легком решении. Однако если вы используете подкласс 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

+0

. Если это возможно, вы можете перенести этот ответ (и некоторые другие ответы). – Adamski

1

Необходимо использовать средство визуализации ячеек пользовательского списка. Например, посмотрите на this how-to.

+0

не могли бы вы уточнить? – Mandar

+0

Я отредактировал свой ответ. –

+0

Спасибо за ответ. Но есть ли более простой способ? Я попробовал setForeground() после каждого addItem(), но он не работает. Я не знаю почему. – Mandar

1

Вы должны реализовать новый ListCellRenderer, который будет использоваться вашей выкладкой, через setRenderer, чтобы правильно отобразить ваши объекты.

Вы можете расширить BasicComboBoxRenderer, чтобы избежать повторного использования всего.

Смежные вопросы