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(...)
метод, и что вы используете параметры, которые передаются в этот метод правильно.