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

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

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

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

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

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

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

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

серые ячейки

есть идеи?

Спасибо,

Дейв

2 ответа

Решение

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

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

  • Создать один класс визуализации ячейки
  • Используйте состояние ячейки, чтобы определить ее цвет.
  • Если столбец равен 0, то установите его на лосось.
  • В противном случае, если столбец не равен 0 и значение указывает на то, что он занят, установите его на желтый
  • В остальном серый.
  • Ключ: все зависит от логики у вас внутри getTableCellRendererComponent(...) метод, и что вы используете параметры, которые передаются в этот метод правильно.
Другие вопросы по тегам