The example from the first answer shows the main solution, but will not work out of the box. Unable to change final "selectedRow". Therefore, you should use a mutable integer (for example, AtomicInteger). TamleModelListener sends the task to the swing, so it is called later - in most cases, after changing the table, the selection is already deleted. Thus, selectRow will in most cases be -1.
I slightly modified the above example (and added single cell selection, but also works for full rows):
final AtomicInteger selectedRow=new AtomicInteger(-1); final AtomicInteger selectedCol=new AtomicInteger(-1); tblZeiten.getSelectionModel().addListSelectionListener(new ListSelectionListener() { @Override public void valueChanged(ListSelectionEvent e) { selectedRow.set(tblZeiten.getSelectedRow()); selectedCol.set(tblZeiten.getSelectedColumn()); } }); tblZeiten.getModel().addTableModelListener(new TableModelListener() { @Override public void tableChanged(TableModelEvent e) { TableCellEditor editor=tblZeiten.getCellEditor(); if (editor!=null) editor.cancelCellEditing(); final int row=selectedRow.get(); final int col=selectedCol.get(); if (row<0||col<0) return; SwingUtilities.invokeLater(new Runnable() { @Override public void run() {
source share