JPanel (boolean hasTabsInDialog) { myParametersTable = new TableView<>(myParametersTableModel) { @Override public void removeEditor() { clearEditorListeners(); super.removeEditor(); } @Override public void editingStopped(ChangeEvent e) { super.editingStopped(e); repaint(); // to update disabled cells background } private void clearEditorListeners() { final TableCellEditor editor = getCellEditor(); if (editor instanceof StringTableCellEditor ed) { ed.clearListeners(); } else if (editor instanceof CodeFragmentTableCellEditorBase) { ((CodeFragmentTableCellEditorBase)editor).clearListeners(); } } @Override public Component prepareEditor(final TableCellEditor editor, final int row, final int column) { final DocumentListener listener = new DocumentListener() { @Override public void documentChanged(@NotNull DocumentEvent e) { final TableCellEditor ed = myParametersTable.getCellEditor(); if (ed != null) { Object editorValue = ed.getCellEditorValue(); myParametersTableModel.setValueAtWithoutUpdate(editorValue, row, column); updateSignature(); } } }; if (editor instanceof StringTableCellEditor ed) { ed.addDocumentListener(listener); } else if (editor instanceof CodeFragmentTableCellEditorBase) { ((CodeFragmentTableCellEditorBase)editor).addDocumentListener(listener); } return super.prepareEditor(editor, row, column); } }; myParametersTable.setShowGrid(false); myParametersTable.setCellSelectionEnabled(true); myParametersTable.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION); myParametersTable.getSelectionModel().setSelectionInterval(0, 0); myParametersTable.setSurrendersFocusOnKeystroke(true); myPropagateParamChangesButton.setShortcut(CustomShortcutSet.fromString("alt G")); if (isListTableViewSupported()) { myParametersList = createParametersListTable(); final JPanel buttonsPanel = ToolbarDecorator.createDecorator(myParametersList.getTable()) .addExtraAction(myPropagateParamChangesButton) .createPanel(); TableModel tableModel = myParametersList.getTable().getModel(); tableModel.addTableModelListener(mySignatureUpdater); Disposer.register(myDisposable, () -> tableModel.removeTableModelListener(mySignatureUpdater)); return buttonsPanel; } else { final JPanel buttonsPanel = ToolbarDecorator.createDecorator(getTableComponent()) .addExtraAction(myPropagateParamChangesButton) .createPanel(); myPropagateParamChangesButton.setEnabled(false); myPropagateParamChangesButton.setVisible(false); myParametersTableModel.addTableModelListener(mySignatureUpdater); Disposer.register(myDisposable, () -> myParametersTableModel.removeTableModelListener(mySignatureUpdater)); customizeParametersTable(myParametersTable); return buttonsPanel; } }