[Java] Auswahl in JTable erhalten

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.

  1. public class SmsLibTable extends JTable {
  2.     private ITableModel myModel = new MyTableModel();
  3.     private int selectedRow;
  4.  
  5.     public SmsLibTable() {
  6.         super();
  7.         setModel( myModel );
  8.     }
  9.  
  10.     @Override
  11.     public void setModel(TableModel newModel) {
  12.         newModel.addTableModelListener( new TableModelListener() {
  13.             @Override
  14.             public void tableChanged(TableModelEvent e) {
  15.                 if ((getSelectedRow() == -1) && (selectedRow >= 0) {
  16.  
  17.                     if (selectedRow +1 >= getRowCount()) {
  18.                         selectedRow = getRowCount()-1;
  19.                         if (selectedRow < 0)
  20.                             return;
  21.                     }
  22.                     addRowSelectionInterval(selectedRow, selectedRow);
  23.                 }
  24.             }
  25.         });
  26.  
  27.         super.setModel(newModel);
  28.  
  29.         newModel.addTableModelListener( new TableModelListener() {
  30.             @Override
  31.             public void tableChanged(TableModelEvent e) {
  32.                 selectedRow = getSelectedRow();
  33.             }
  34.         });
  35.     }
  36. }

Schreibe einen Kommentar