С готовой реализацией JTable вы не можете.Когда вы инициализируете JTable с помощью Object[][] rowData
, этот rowData используется анонимным экземпляром AbstractTableModel, но он недоступен как таковой извне.
public JTable(final Object[][] rowData, final Object[] columnNames) {
this(new AbstractTableModel() {
public String getColumnName(int column) { return columnNames[column].toString(); }
public int getRowCount() { return rowData.length; }
public int getColumnCount() { return columnNames.length; }
public Object getValueAt(int row, int col) { return rowData[row][col]; }
public boolean isCellEditable(int row, int column) { return true; }
public void setValueAt(Object value, int row, int col) {
rowData[row][col] = value;
fireTableCellUpdated(row, col);
}
});
}
Можно рассмотреть возможность создания подкласса как JTable, так и AbstractTableModel и «перезаписать» этоконструктор в JTable для создания вашей собственной реализации TableModel, которая будет хранить эту ссылку Object [] [] и возвращать ее с Object[][] getRowData()
.Или просто сохраните rowData
как поле в самом подклассе JTable после вызова super(...)
в этом конструкторе - если вы действительно не заботитесь о MVC.
Но вам нужно убедиться, что послетаблица редактируется, исходная модель сохраняется и не заменяется новым объектом модели (конечно, другого типа) с setModel
.Если это так, то, чего вы хотите, достичь невозможно - вам нужно будет пройти через все ячейки.