void () { myTableModel = new AbstractTableModel() { @Override public int getColumnCount(){ return myModel.getColumnCount(); } @Override public int getRowCount(){ return myData != null ? myData.size() : 0; } @Override public Class getColumnClass(int columnIndex){ return myModel.getColumnClass(columnIndex); } @Override public String getColumnName(int column){ return myModel.getColumnName(column); } @Override public Object getValueAt(int rowIndex, int columnIndex){ return myModel.getField(myData.get(rowIndex), columnIndex); } @Override public void setValueAt(Object aValue, int rowIndex, int columnIndex) { myModel.setValue(aValue, myData.get(rowIndex), columnIndex); fireTableRowsUpdated(rowIndex, rowIndex); } @Override public boolean isCellEditable(int rowIndex, int columnIndex) { return myModel.isEditable(columnIndex); } }; myTable = createTable(); myTable.setModel(myTableModel); myTable.setShowColumns(false); myTable.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); new DoubleClickListener() { @Override protected boolean onDoubleClick(@NotNull MouseEvent event) { doEdit(); return true; } }.installOn(myTable); }