Создание объекта "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)); |
TableModel byDefault = exampleJTable.getModel(); System.out.println(exampleJTable.getValueAt(2, 2).toString()); |
Существует два класса, реализующих интерфейс TableModel: DefaultTableModel и AbstractTableModel.
- AbstractTableModel реализует большинство методов TableModel.
- DefaultTableModel — это подкласс AbstractTableModel с тремя реализованными методами, данные которых хранятся в массиве.
- public int getRowCount(): Возврат  количество строк.
- public int getColumnCount(): возвращает количество столбцов.
- public Object getValueAt(int row, int column): возвращает объект в поле (строка, столбец).
Использование 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(модель); |