Создание объекта "JTable" с помощью AbstractTableModel

Каждый JTable имеет связанную с ним модель. Возможно, вы этого не осознаете, но он создается по умолчанию при создании двумерного массива:

Object[][] data = {{1,2,3},{2,3,4},{4,5,6},{7,8,9}};
Строка[]  title= {"Column1", "Column2", "Столбец3"};
JTable exampleJTable = новый JTable (данные, имя столбца)};

К счастью,  Вы можете использовать объект JTable, не обращаясь к шаблону таблицы. Например, чтобы узнать метод ячейки (2, 3), используйте метод getValueAt:

System.out.println(exampleJTable.getValueAt(2, 2));
Объект "JTable" создает DefaultTableModel  потому что он управляет отображением данных в таблице и оставляет управление данными табличной модели. Если модель не определяется пользователем, используется DefaultTableModel. Вы можете убедиться в этом, взглянув на модель из model в JTable.

TableModel byDefault = exampleJTable.getModel();
System.out.println(exampleJTable.getValueAt(2, 2).toString());
Интерфейс TableModel определяет, как данные могут взаимодействовать с JTable. Это упрощает создание и использование таблицы в Java. После того, как табличная модель связана с JTable, вам не нужно беспокоиться о том, как JTable получает доступ к данным. Все, о чем вам нужно беспокоиться, это создать шаблон и использовать его.

Существует два класса, реализующих интерфейс TableModel: DefaultTableModel и AbstractTableModel.
  • AbstractTableModel реализует большинство методов TableModel.
  • DefaultTableModel — это подкласс AbstractTableModel с тремя реализованными методами, данные которых хранятся в массиве.
    • public int getRowCount():  Возврат  количество строк.
    • public int getColumnCount(): возвращает количество столбцов.
    • public Object getValueAt(int row, int column): возвращает объект в поле (строка, столбец).
Выбор между использованием AbstractTableModel или DefaultTableModel связан с данными. DefaultTableModel использует структуру Vector. Эта реализация  Поддерживается  на Java и с точки зрения программирования тоже. Большая часть это  Вы все равно должны знать, вызывает ли эта реализация проблемы для вашего приложения.

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

Создание табличной модели

class Model extends AbstractTableModel{
private Object[][] data;
приватный заголовок String[];

public Model(Object[][] data, String[] title){
this.data = data;
this.title = заголовок;
}
/**
* Возвращает заголовок столбца и индекс
*/
public String getColumnName(int col) {
return this.title[col];
}
/**
* Возвращает количество столбцов
*/
public int getColumnCount() {
return this.title.length;
}
/**
* Возвращает количество строк
*/
public int getRowCount() {
return this.data.length;
}
/**
* Возвращает объект на пересечении row и column
*/
public Object getValueAt(int row, int col) {
return this.data[row][col];
}
/**
* Изменить объект на пересечении строк и столбцов
*/
public void setValueAt(Object value, int row, int col) {
this.data[row][col] = value;
}
}
Этот код связывает шаблон с таблицей
//Создание объекта JTable
JTable table = новый JTable();
//Создание шаблона
Model =new Model(данные, заголовок);
//Связываем шаблон с JTable
table.setModel(модель);