Разработка простого средства визуализации ячеек для Nimbus - PullRequest
4 голосов
/ 24 августа 2009

У меня есть рендерер ячеек с простым ишем, который состоит из нескольких JLabel s (сам рендерер расширяет JPanel), и я пытаюсь заставить его визуально отображаться в стиле Nimbus. В основном происходит то, что в светлых строках (так как Nimbus имеет альтернативную окраску строк ), мой специфический рендерер ячеек использует цвет фона таблицы (который намного темнее, чем и светлее, и более темные ряд цветов). В моем рендерере я делаю:

if (isSelected) {
    setBackground(table.getSelectionBackground);
}
else {
    setBackground(table.getBackground);
}

Если я закомментирую весь этот блок кода, тогда все мои строки будут иметь более темный ряд цвет (не фон таблицы, но также не в альтернативных цветах). Я не уверен, что даже понимаю, что может происходить! Как приведенный выше фрагмент кода создает ячейки с разными цветами фона? Меняется ли цвет table.getBackground между вызовами моего метода?

Я пытался использовать этот фрагмент кода:

Color alternateColor = sun.swing.DefaultLookup.getColor(
                         peer, 
                         peer.getUI, 
                         "Table.alternateRowColor");
if (alternateColor != null && row % 2 == 0)
    setBackground(alternateColor);

Который из класса DefaultTableCellRenderer. И это, похоже, никак не влияет. У кого-нибудь есть кастомизаторы, работающие с Nimbus?

РЕДАКТИРОВАТЬ : Если кому-то интересно, это оказалось проблемой с Scala средствами визуализации ячеек таблицы, поскольку я фактически использовал Scala, а не Java. Принятый ответ ниже прекрасно работает в Java-программе. Отдельный вопрос подан здесь .

1 Ответ

4 голосов
/ 24 августа 2009

Ваш первый кусок кода, если хорошо. Я думаю, что вы должны использовать UIManager.getColor("Table.alternateRowColor") для альтернативных строк и table.getBackground () в противном случае Для выбранной строки используйте table.getSelectionBackground (). Таким образом, ваш код может выглядеть как

if (isSelected) {
    setBackground(table.getSelectionBackground());
}
else {
    if ( row % 2 == 0 ) {
       setBackground(UIManager.getColor("Table.alternateRowColor"));
    } else { 
       setBackground(table.getBackground());
    }
}

Не забудьте убедиться, что ваша панель непрозрачна, а надписи прозрачны.

Вот хорошая ссылка на настройки Nimbus UI по умолчанию: http://www.duncanjauncey.com/java/ui/uimanager/UIDefaults_Java1.6.0_11_Windows_2000_5.0_Nimbus.html

...