Разработка простого средства рендеринга ячеек для внешнего вида Nimbus
-
19-09-2019 - |
Вопрос
У меня есть простой рендеринг ячеек, состоящий из нескольких JLabel
s (сам рендерер расширяет 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