JXTable с DefaultTableCellrenderer и альтернативной подсветкой чередования
Я обновил до SwingX-1.6.2, но обнаружил проблемы, которые не появились в 1.6. Цвета ячеек JXTable выглядят странно. Я использую маркер с альтернативным чередованием (HighlighterFactory.createAlternateStriping) для цветов и подкласс DefaultTableCellRenderer для настроек текста, шрифта,...
Начиная с 1.6.1, кажется, что цвета подсветки игнорируются, если установлен пользовательский модуль визуализации ячеек. В документации сказано, что есть взлом, но он не работает.
У кого-нибудь есть решение для этого?
3 ответа
Для пользовательского рендеринга ячейки в SwingX,
- никогда не подкласс xxRenderer
- никогда не подкласс JXTable (ни JXList, JXTree/Table)
Вместо
- реализовать / использовать StringValue для настройки аспектов "содержимого", таких как текст, значок.
- используйте / внедряйте Highlighter для настройки "визуальных" аспектов, таких как цвет, шрифт, рисование
- если требуется условное визуальное оформление, внедрите / используйте HighlightPredicate и настройте Highlighter с его помощью
- настроить xxRenderer с помощью StringValue и / или Highlighter
Редактировать:
если нужны неподдерживаемые типы компонентов рендеринга, необходимо реализовать ComponentProvider. Это небольшая работа, потому что провайдер должен выполнить строгий контракт (например, сброс значений гарантированных свойств, уважать StringValue, ... см. API-документ), но это необходимо только один раз для каждого типа компонента. После этого один и тот же поставщик может использоваться во всех типах компонентов сбора (список JXList, JXComboBox, JXTree/Table)
Я не смог воспроизвести проблему в SSCCE, но я в своем (очень сложном) приложении решил ее, используя средство визуализации, унаследованное от SwingX DefaultTableRenderer вместо java DefaultTableCellRenderer.
Я не знаю, как JXTable делает подсветку, но вы всегда можете сделать это самостоятельно. См. Таблица Строка Renderering.