Использование таблиц при программировании на языке 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);
}
}
В качестве буфера данных, может выступать массив или список, структура которого описана в отдельном классе.
Дата добавления: 2016-01-03; просмотров: 841;