#java #swingx #jxtable
#java #swingx #jxtable
Вопрос:
Я обновился до SwingX-1.6.2, но обнаружил проблемы, которые не появлялись в 1.6. Цвета ячеек JXTable выглядят странно. Я использую подсветку с альтернативной чередованием (HighlighterFactory.createAlternateStriping) для цветов и подкласс DefaultTableCellRenderer для настройки текста, шрифта,…
Начиная с 1.6.1, кажется, что цвета подсветки игнорируются, если установлен пользовательский рендеринг ячеек. В документации говорится о взломе, но он не работает.
Есть ли у кого-нибудь решение для этого?
Комментарии:
1. 1 это звучит интересно, не могли бы вы, пожалуйста, связать нас с ресурсами, на которые вы ссылаетесь? или даже предоставить нам SSCCE для работы?
Ответ №1:
Для пользовательского рендеринга ячеек в SwingX,
- никогда-никогда подкласс xxRenderer
- никогда-никогда подкласс JXTable (ни JXList, ни JXTree / Table)
Вместо
- реализуйте / используйте stringValue для настройки аспектов «содержимого», таких как текст, значок..
- используйте / реализуйте маркер для настройки «визуальных» аспектов, таких как цвет, шрифт, художник
- если требуется условное визуальное оформление, внедрите / используйте HighlightPredicate и настройте маркер с его помощью
- настройте xxRenderer с помощью stringValue и / или Highlighter
Редактировать:
если требуются неподдерживаемые типы компонентов рендеринга, то можно реализовать ComponentProvider. Это небольшая работа, потому что поставщик должен выполнять строгий контракт (например, сбрасывать гарантированные значения свойств, уважать stringValue … см. Документ api), но это необходимо только один раз для каждого типа компонента. После завершения один и тот же поставщик может использоваться во всех типах компонентов коллекции (list JXList, JXComboBox, JXTree / Table).
Комментарии:
1. Хорошо, но как я могу использовать пользовательские средства визуализации, такие как флажки, радиокнопки или выпадающие списки, без расширения средства визуализации?
Ответ №2:
Я не знаю, как JXTable выполняет свою подсветку, но вы всегда можете сделать это самостоятельно. Смотрите Визуализацию строк таблицы.
Комментарии:
1. на самом деле … нет 😉 Это неправильно в контексте SwingX
Ответ №3:
Я не смог воспроизвести проблему в SSCCE, но я решил ее в своем (очень сложном) приложении, используя средство визуализации, унаследованное от DefaultTableRenderer от SwingX вместо DefaultTableCellRenderer от java.DefaultTableCellRenderer от Java.
Комментарии:
1. в SwingX никогда не было подкласса xxRenderer (вероятно, нам следовало сделать их окончательными, слишком подчеркнув ;-), они не что иное, как устаревший клей
2. Если функция JXTable полностью отличается от JTable, вам, вероятно, следовало создать для нее новый класс, вместо этого расширив JTable. Наследование должно только расширять поведение и никогда не ограничивать его.
3. он? Это совершенно правильное расширение, поскольку оно значительно расширяет функциональность ядра. Если вы не хотите изучать, как использовать улучшения, не стесняйтесь придерживаться обычной JTable. И примечание: подклассы средства визуализации таблиц по умолчанию для ядра не работают должным образом, потому что эта основная реализация НАРУШЕНА
4. Суть Стефана в том, что тогда это нарушает принцип подстановки Лискова. (Но то же самое делают классы коллекции Java.)