Логин:   Пароль:




Новости
Рассылки
Форум
Поиск


Java
- Апплеты
- Вопрос-ответ
- Классы
- Примеры
- Руководства
- Статьи
- IDE
- Словарь терминов
- Скачать

Мобильная Java
- Игры
- Примеры
- Статьи
- WAP, WML и пр.

JavaScript
- Вопрос-ответ
- Примеры
- Статьи

Веб-мастеринг
- HTML
- CSS
- SSI

Разминка для ума
Проекты
Книги
Ссылки
Программы
Юмор :)




Rambler's Top100

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

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

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

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


Рисунок 1. Задание начальных параметров для построения линий уровня

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

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

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


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.



Автор: ЖМАЙЛОВ Борис Борисович (р.1971),
Окончил технологический факультет ДГТУ (1993).
доцент кафедры «Информатика» ДГТУ,
кандидат технических наук (1996).
ДГТУ г.Ростов-на-Дону
Январь 2005г.


Вадим Дунаев
"JavaScript. Самоучитель"
Подробнее>>
Заказать>>


H. Мухамедзянов
"Java. Серверные приложения"
Подробнее>>
Заказать>>

Узнай о чем ты на самом деле сейчас думаешь тут.


[an error occurred while processing this directive]



Apache Struts 2.0.11
Apache MyFaces Trinidad Core 1.2.3.
Sun переводит мобильные устройства с Java ME на Java SE
Хакерская атака!