Отображение ячейки JTable на основе содержимого - PullRequest
0 голосов
/ 28 октября 2019

Я проектирую систему на Java Swing. У меня есть планшет с именем «больной», и у этого планшета есть столбец с именем «status», в котором есть два значения: одно открыто, а другое закрыто. Когда значение столбца открыто, я хочу изменить цвет на синий, а когда он закрыт, я хочу изменить цвет на красный (когда информация выбирается из базы данных).

1 Ответ

0 голосов
/ 31 октября 2019

Похоже, что вы хотите сделать, это форма условного форматирования для одной или нескольких определенных ячеек в JTable. Это можно сделать, переопределив метод JTable prepareRenderer () с помощью пользовательского метода Prepare Renderer:

enter image description here

Вот исполняемый файлпример кода, который отображает приведенный выше пример формыДобавить строку таблицы "); // Установить всплывающую подсказку для кнопки" Добавить ". // Применить прослушиватель действий к кнопке" Добавить ". AddButton.addActionListener (new ActionListener () {@Override public void actionPerformed (ActionEvent e) {model.addRow (new Object [] {"", "0", "", ""});}}); // Создать JButton 'Close'. JButton closeButton = new JButton ("Close"); closeButton.setToolTipText("Закрыть приложение"); // Установить всплывающую подсказку для кнопки "Закрыть". CloseButton.addActionListener (new ActionListener () {@Override public void actionPerformed (ActionEvent e) {System.exit (0);}}); //Применить прослушиватель действий к кнопке «Закрыть». ButtonsPanel.add (doLabel); // Добавить JLabelна кнопки JPanel. buttonsPanel.add (AddButton);// Добавить 'Добавить' JButton к кнопкам JPanel. buttonsPanel.add (closeButton);// Добавить кнопку «Закрыть» JButton к кнопкам JPanel. frame.add (tablePanel, BorderLayout.NORTH);// Добавить таблицу JPanel в начало формы JFrame. frame.add (buttonsPanel, BorderLayout.SOUTH);// Добавить кнопки JPanel в конец формы JFrame. frame.pack ();// Упаковать компоненты в JFrame. frame.setVisible (истина);// Сделать форму JFrame видимой. frame.setLocationRelativeTo (нуль);// Убедитесь, что JFrame отображается в центре экрана. } / ** * Возвращает либо Color WHITE, либо Color BLACK в зависимости от яркости * того, каким может быть предоставленный цвет фона. Если цвет фона * слишком темный, возвращается БЕЛЫЙ. Если цвет фона * слишком яркий, то возвращается ЧЕРНЫЙ.

* * @param currentBackgroundColor (Color Object) Текст цвета фона * будет находиться на.
* * @return (Color Object) ЦветБЕЛЫЙ или Цвет ЧЕРНЫЙ. * / public static Цвет ProperTextColor (Цвет currentBackgroundColor) {double L;// Содержит значение яркости для поставляемого цвета ColorterminColor;// По умолчанию // Рассчитать яркость цвета из предоставленного цвета. int r = currentBackgroundColor.getRed ();int g = currentBackgroundColor.getGreen ();int b = currentBackgroundColor.getBlue ();L = (int) Math.sqrt ((r * r * .241) + (g * g * .691) + (b * b * .068));// Возвращаем требуемый цвет текста, соответствующий // предоставленному цвету фона. if (L> 129) {определеноColor = Color.decode ("# 000000");// White} else {определенноеColor = Color.decode ("# FFFFFF");// Черный} return определенныеColor;}}

В приведенном выше примере есть два конкретных столбца данных, для которых в каждой ячейке столбца проверены определенные условия: столбец Возраст и Статус дела колонка.

В столбце Возраст определенный возрастной диапазон определяет цвет фона ячейки, который будет отображаться. Вы заметите, что для строки Фреда Флинстона значение age содержит сообщение об ошибке (выделено красным) вместо значения age. Если вы посмотрите на значения массива данных объекта, то увидите, что введенное там значение ( "@ 1" ) для Age не является правильным целочисленным значением. Это еще одно условие, которое проверяется в Renderer. Цвета, используемые для этого столбца, объявляются в классе как переменные-члены.

Статус случая Столбец таблицы проверяет три конкретных условия:

  1. Если значение ячейкисодержит строковое значение «Open», тогда цвет фона этой ячейки будет светло-красный .
  2. Если значение ячейки содержит строковое значение «Closed», тогда цвет фона этой ячейки будет голубой .
  3. Если значение ячейки отличается от"Open" или "Closed", тогда цвет фона этих ячеек будет исходным цветом фона ячейки.

Даже цвет выбора строк изменен в этом пользовательском рендерере на более светлый, более удобный синий (ну, на мой взгляд).

Поскольку доступна возможность изменения цвета фона, также должна быть возможность изменить цвет текста (передний план ячейки), чтобы он был читаемым в определенных цветах. По умолчанию цвет текста ячейки JTable черный, что делает текст чрезвычайно трудным для чтения, если цвет фона ячейки изменяется на темно-серый или даже темно-красный. Белый текст будет лучшим выбором. По этой причине я также включил вспомогательный метод с именем ProperTextColor () , который автоматически предоставит цвет текста (белый или черный), который будет легче всего увидеть в зависимости от цвета фона, предоставленного методу. Это можно увидеть на рабочем примере изображения приложения, предоставленного конкретно в ячейках столбцов Age (строки: «Frank Thetank» и «Fred Flintston»).

...