- •Федеральное агентство по образованию рф
- •2. Организация программ на языке Java.
- •2.1. Обработка критических ошибок и методы их локализации в языке Java..
- •3. Ввод/вывод данных в консольном режиме.
- •4. Одномерные массивы.
- •5. Двумерные массивы.
- •Int a[][];
- •6. Разработка приложений на языке Java.
- •7. Разработка собственных объектов.
- •7.1. Объекты управления
- •8. Разработка аплитов.
- •9. Параллельные потоки в языке Java.
- •10. Использование таблиц при программировании на языке Java.
- •11. Файловый ввод-вывод в приложениях
- •Список рекомендуемой литературы
10. Использование таблиц при программировании на языке Java.
При разработке программного обеспечения, особенно связанного с обработкой структурированных данных широкое применение получили таблицы.
Для использования таблиц в Java– приложениях существует классJTable. Этот компонент является диспетчером сообщений генерируемых системой при взаимодействии с пользователем. Компонент преобразует системные сообщения во внутренний формат сообщений системы таблиц и передает их классу модели таблицы.
Моделью таблицы называется компонент, который описывает колонки строки и поведение таблицы и являющиеся производным от AbstractTableModel. Модель таблицы устанавливает компонентуJTableс помощью функцииsetModel.
Общая структура обмена сообщениями между моделью таблицы и пользователем имеет вид, приведенный на рисунке 7.

Рис. 7 Взаимодействие модели таблицы с пользователем.
Таким образом из рисунка 7 видно, что компонент JTableявляется своеобразным устройством ввода-вывода, а все управление таблицей выполняет непосредственно модель таблицы.
Как и при создании большинства классов на языке Java, при создании класса модели таблицы ряд функций необходимо переопределить. Список переопределяемых функций приведен в таблице 5.
Таблица 5. Функции, переопределяемые в классе дочернем от класса модели таблицы.
|
Функция |
Назначение |
|
getValueAt() |
Функция, возвращающая значение ячейки таблицы имеющей указанный номер строки и номер столбца. Функция должна возвращать значение типа Object |
|
getColumnCount() |
Функция, возвращающая текущее количество колонок таблицы. Функция должна возвращать целочисленное значение. |
|
getRowCount() |
Функция, возвращающая текущее количество строк таблицы. Функция должна возвращать целочисленное значение. |
|
getColumnName() |
Функция, возвращающая заголовок колонки таблицы. В качестве параметра функции передается номер колонки. Возвращать функция должна значение типа String |
|
getColumnClass() |
Функция, возвращающая класс колонки таблицы. В качестве параметра функции передается номер колонки. Возвращать функция должна значение типа Class. Данный параметр необходим классJTableдля определения способа отображения информации в ячейках колонки таблицы. Это может быть текст, числовое значение, изображение и т.д. |
|
isCellEditable() |
Функция должна возвращать истину, если разрешено редактирование ячейки, указанной в качестве параметра с клавиатуры и ложь если запрещено. |
|
setValueAt() |
Функция вызывается компонентом JTableпри завершении редактирования ячейки таблицы. В качестве параметров функции передается результат редактирования и позиция ячейки в таблице. |
Следует заметить, что модель таблицы не имеет своего буфера для хранения данных, поэтому его надо организовывать отдельно и обрабатывать в зависимости от сообщений компонента JTable. Описание класса таблицы должно иметь следующий вормат.
// Определение пакета, в котором находиться класс
package имя пакета;
// Подключение библиотеки работы с таблицами
import javax.swing.table.*;
// Описание класса модели
public class имя класса extends AbstractTableModel {
private тип списка данных data=null;
public имя класса() {
data=new тип списка данных ();
}
// Функция, возвращающая компоненту JTable количество колонок таблицы
public int getColumnCount() {
return количество колонок;
}
// Функция, возвращающая компоненту JTable данных ячейки
public Object getValueAt(int row, int col) {
return data.getData(row,col);
}
// Функция, возвращающая компоненту JTable данные ячейки
public int getRowCount() {
return data.GetCount();
}
// Функция, возвращающая компоненту JTable заголовок ячейки
public String getColumnName(int column)
{
return data.getHeader(column);
}
// Функция, возвращающая компоненту JTable класс данных ячейки
public Class getColumnClass(int col)
{
return getValueAt(0,col).getClass();
}
// Функция, возвращающая компоненту JTable возможность редактирования
// данных ячейки
public boolean isCellEditable(int row, int col)
{
return false;
}
// Функция, с помощью которой, компонент JTable возвращает значение ячейки
// после редактирования
public void setValueAt(String aValue, int row, int column)
{
data.setData(row,column,aValue);
}
}
В качестве буфера данных, может выступать массив или список, структура которого описана в отдельном классе.
