Java bietet mittels des AbstractTableModels eine einfache Möglichkeit eigene Daten darzustellen.
Problematisch sind nur die fireTableDataChanged()
Die aktuelle Auswahl in der Tabelle wird dadurch „vergessen“.
Mittels eigener Eventlistener ist es aber möglich die Auswahl zu konservieren und nach einem Update wiederherzustellen. Dabei ist aber zu beachten, dass die Eventlistener in umgekehrter Reihenfolge informiert werden.
- public class SmsLibTable extends JTable {
- private ITableModel myModel = new MyTableModel();
- private int selectedRow;
- public SmsLibTable() {
- super();
- setModel( myModel );
- }
- @Override
- public void setModel(TableModel newModel) {
- newModel.addTableModelListener( new TableModelListener() {
- @Override
- public void tableChanged(TableModelEvent e) {
- if ((getSelectedRow() == -1) && (selectedRow >= 0) {
- if (selectedRow +1 >= getRowCount()) {
- selectedRow = getRowCount()-1;
- if (selectedRow < 0)
- return;
- }
- addRowSelectionInterval(selectedRow, selectedRow);
- }
- }
- });
- super.setModel(newModel);
- newModel.addTableModelListener( new TableModelListener() {
- @Override
- public void tableChanged(TableModelEvent e) {
- selectedRow = getSelectedRow();
- }
- });
- }
- }