Пример из первого ответа показывает базовое решение, но не будет работать из коробки. Невозможно изменить окончательный «selectedRow». Поэтому следует использовать изменяемое целое число (например, AtomicInteger).
TamleModelListener отправляет задачу на качание, поэтому он вызывается позже - в большинстве случаев после того, как изменение таблицы уже убрало выбор. Поэтому selectedRow в большинстве случаев будет -1.
Я немного изменил приведенный выше пример (и добавил выделение одной ячейки, но это также работает для полных строк):
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() {
// http://book.javanb.com/the-java-developers-almanac-1-4/egs/javax.swing.table/Sel.html
tblZeiten.changeSelection(row,col, false, false);
}
});
}
});