private void initTable() {
    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);
  }
private void initTable()