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.

Другие вопросы по тегам