Разработка простого средства рендеринга ячеек для внешнего вида Nimbus

StackOverflow https://stackoverflow.com/questions/1324012

Вопрос

У меня есть простой рендеринг ячеек, состоящий из нескольких JLabels (сам рендерер расширяет JPanel), и я пытаюсь заставить его разумно визуализироваться в стиле 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, а не Java.Принятый ниже ответ отлично работает в программе Java.Задан отдельный вопрос здесь.

Это было полезно?

Решение

Ваш первый фрагмент кода, если все в порядке. Я думаю, вам придется использовать 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 по умолчанию:http://www.duncanjauncey.com/java/ui/uimanager/UIDefaults_Java1.6.0_11_Windows_2000_5.0_Nimbus.html

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top