Реализация возможности выбора цвета в ячейке JTable с помощью JComboBox

Автор: content Вторник, Апрель 10th, 2012 Нет комментариев

Рубрика: Язык Java

Разработан алгоритм и предложено программное решение средствами языка Java2, заливки и отображения цвета в ячейке таблицы объекта библиотеки Swing JTable. Предложен способ решения данной задачи с использованием «легковесного» компонента JcomboBox.

Данная задача возникла при построении графика полиномиальной функции на симлпекс — плане для заданных значений отклика, которые необходимо для удобства выделять различными цветами. Исходными данными для построения являются: количество уровней отклика функции, значение по каждому уровню и цвет которым необходимо отображать соответствующий уровень на симплекс плане. Эти параметры задаются в окне диалога (см. рис. 1) и передаются в соответствующий класс, который выполняет построение.


Рисунок 1. Задание начальных параметров для построения линий уровняКак видно из рис1. данные помещаются в объект JTable, поэтому при отображении цвета уровня в таблице необходимо решить следующие задачи:

 

  1. Отображать соответствующий цвет заливки в ячейке таблицы;
  2. Обеспечить возможность изменения цвета заливки

Заполнение таблицы происходит в цикле, и цвет задается следующим образом:

  1. Color cl = new Color((int)(Math.random()*256),
    (int)(Math.random()*256),
    (int)(Math.random()*256));

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

    Так как при предложенном методе заполнения таблицы не исключена вероятность появления дух одинаковых цветов, или разных оттенков одного цвета в столбце, то необходимо как-то их изменять. Из имеющихся стандартных решений, наиболее предпочтительным, является вариант с использованием объекта JСolorChooser, который обладает довольно мощными возможностями по настройке параметров цвета. Однако я посчитал, что в моем случае необходимо использовать более простое решение, например поле со списком (объект JComboBox) элементами которого были бы объекты Color. Однако в этом случае я столкнулся с проблемой вывода цвета в список, так как вывод элемента списка осуществляется методом toString().

    Данная проблема была решена следующим образом. Был создан класс, состоящий из двух полей, объекты типа Color и String, в котором был переопределен метод toString():

    class NamedColor extends Color {
    String name;
    Color color;
    public NamedColor(Color color, String name) {
    super(color.getRGB());
    this.color = color;
    this.name = name;
    }
    public Color getTextColor() {
    return color;
    }

    public String toString() {
    return name;
    }
    }

    Далее был создан класс отвечающий за визуализацию элементов списка:

    class ComboRenderer extends JLabel  implements ListCellRenderer {
    public ComboRenderer()
    {
    setOpaque(true);
    }

    public Component getListCellRendererComponent(
    JList list,
    Object value,
    int index,
    boolean isSelected,
    boolean f) {
    NamedColor c = (NamedColor) value;
    setBackground(c);
    setText(c.toString());
    return this;
    }
    }

    В этом классе устанавливается соответствующий цвет заливки элемента списка. После этого осталось только реализовать метод создания и заполнения объекта JComboBox и связать его с соответствующей таблицей:

    public void setComboBox(TableColumn tabCol){
    JComboBox comboBox = new JComboBox();
    for (int i=1;i<100;i++){
    comboBox.addItem(new NamedColor((new Color(
    (int)(Math.random()*256),
    (int)(Math.random()*256),
    (int)(Math.random()*256))),» «));

    }

    tabCol.setCellEditor(new DefaultCellEditor(comboBox));
    comboBox.setToolTipText(«Выбор цвета»);
    comboBox.setRenderer(new ComboRenderer());
    tabCol.setCellRenderer(new ColorRenderer());
    }

    В итоге диаграмма выглядит следующим образом .

рисунок 2:

Realization of an opportunity of a choice of color in cell JTable with help JComboBox.

The algorithm is developed and the program decision means of language Java2, заливки and displays of color in a cell of the table of object of library Swing JTable is offered. The way of the decision of the given problem with use of «superficial» component JcomboBox is offered.

Источник: http://www.javaportal.ru/java/articles/colorJTable.html
Автор: ЖМАЙЛОВ Борис Борисович (р.1971)

Оставить комментарий

Чтобы оставлять комментарии Вы должны быть авторизованы.

Похожие посты