Java Jtable, раскрашивайте каждую ячейку разным цветом, не создавая для каждой ячейки отдельный рендерер.

Я делаю программу, которая является чем-то вроде рум-менеджера,

Каждый день в каждой комнате разные клиенты, иногда 1 клиент может снять несколько комнат в один день.

Я хочу раскрасить каждого клиента в свой цвет. могу ли я сделать это, не создавая уникальный модуль визуализации ячеек для каждого клиента.

Я новичок в J-Tables, и вся эта система рендеринга мне кажется не такой эффективной.

это снимок экрана моего приложения,

Я использую другой рендерер для заголовков столбцов для будних и выходных дней. Кроме того, ячейки являются J-кнопками, и средство визуализации окрашивает их, но только в один и тот же цвет.

Серые ячейки — «Новые», а оранжевые — Заняты клиентами, разными клиентами, одного цвета :(

серые ячейки - новые, а оранжевые - заняты клиентами, разными клиентами, одного цвета :(

Любые идеи ?

спасибо,

Дэйв


person David Gidony    schedule 08.12.2014    source источник


Ответы (2)


См. пример № 3 ("рендеринг красным или зеленым") здесь: http://www.javapractices.com/topic/TopicAction.do?Id=168

Суть в том, что ваш Renderer может использовать один общий JLabel, задавая для него другой цвет в зависимости от ячейки (в приведенном выше примере они расширяют DefaultTableCellRenderer, который расширяет JLabel, поэтому фактически один и тот же JLabel используется для всех ячеек. Если вы не не нравится наследование, вы можете просто использовать свой собственный общий JLabel). Это работает, потому что процесс рендеринга JTable использует JLabel в качестве «многоразового штампа» — последовательно проходя по ячейкам, «записывая» внешний вид ячейки и двигаясь дальше. Если ваша таблица (скажем) 5X3, на самом деле она не содержит 15 ярлыков, а только 15 изображений.

person Pelit Mamani    schedule 08.12.2014

  • Создайте один класс визуализатора ячеек
  • Используйте состояние ячейки, чтобы определить ее цвет.
  • Если столбец равен 0, установите его на лосося.
  • В противном случае, если столбец не равен 0 и значение предполагает, что он занят, установите для него желтый цвет.
  • В противном случае серый.
  • Ключ: все зависит от логики внутри вашего метода getTableCellRendererComponent(...) и от того, правильно ли вы используете параметры, которые передаются в этот метод.
person Hovercraft Full Of Eels    schedule 08.12.2014
comment
это то, что я сделал до сих пор. Я хочу сделать что-то вроде этого: если столбец не равен 0, а ячейка занята, посмотрите, какое значение цветового кода является предлагаемым значением, и раскрасьте ячейку в соответствии с ним. Пример: если ячейка занята клиентом A - установите цвет ячейки на зеленый, если ячейка занята клиентом B - установите цвет ячейки на СИНИЙ, если ячейка занята клиентом C - установите цвет ячейки на коричневый и т. д. - person David Gidony; 08.12.2014