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






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


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

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

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

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

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




Rambler's Top100
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г.

Warning: mysql_connect() [function.mysql-connect]: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /pub/home/javaport/javaportal/books/show2b.php on line 11

Warning: mysql_db_query() [function.mysql-db-query]: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /pub/home/javaport/javaportal/books/show2b.php on line 19

Warning: mysql_db_query() [function.mysql-db-query]: A link to the server could not be established in /pub/home/javaport/javaportal/books/show2b.php on line 19

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /pub/home/javaport/javaportal/books/show2b.php on line 30
Узнай о чем ты на самом деле сейчас думаешь тут.


[an error occurred while processing this directive]



Warning: mysql_connect() [function.mysql-connect]: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /pub/home/javaport/javaportal/news/worldnews.php on line 91

Warning: mysql_db_query() [function.mysql-db-query]: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /pub/home/javaport/javaportal/news/worldnews.php on line 93

Warning: mysql_db_query() [function.mysql-db-query]: A link to the server could not be established in /pub/home/javaport/javaportal/news/worldnews.php on line 93

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /pub/home/javaport/javaportal/news/worldnews.php on line 95