Change signature dialog table: correctly add and remove cell editor listeners (IDEA-78550)

This commit is contained in:
kirill.safonov
2011-12-16 18:18:38 +04:00
parent 922a496300
commit 5ddc6b6ee6
3 changed files with 28 additions and 8 deletions
@@ -65,10 +65,8 @@ import javax.swing.table.TableCellEditor;
import java.awt.*;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
import java.util.ArrayList;
import java.util.Collections;
import java.util.*;
import java.util.List;
import java.util.Set;
/**
* @author Konstantin Bulenkov
@@ -370,16 +368,30 @@ public abstract class ChangeSignatureDialogBase<P extends ParameterInfo, M exten
protected JPanel createParametersPanel(boolean hasTabsInDialog) {
myParametersTable = new TableView<ParameterTableModelItemBase<P>>(myParametersTableModel) {
public void removeEditor() {
clearEditorListeners();
super.removeEditor();
}
@Override
public void editingStopped(ChangeEvent e) {
super.editingStopped(e);
repaint(); // to update disabled cells background
}
@Nullable
@Override
public TableCellEditor getCellEditor(final int row, final int column) {
final TableCellEditor editor = super.getCellEditor(row, column);
private void clearEditorListeners() {
final TableCellEditor editor = getCellEditor();
if (editor instanceof StringTableCellEditor) {
final StringTableCellEditor ed = (StringTableCellEditor)editor;
ed.clearListeners();
}
else if (editor instanceof CodeFragmentTableCellEditorBase) {
((CodeFragmentTableCellEditorBase)editor).clearListeners();
}
}
public Component prepareEditor(final TableCellEditor editor, final int row, final int column) {
final DocumentAdapter listener = new DocumentAdapter() {
@Override
public void documentChanged(DocumentEvent e) {
@@ -400,7 +412,7 @@ public abstract class ChangeSignatureDialogBase<P extends ParameterInfo, M exten
else if (editor instanceof CodeFragmentTableCellEditorBase) {
((CodeFragmentTableCellEditorBase)editor).addDocumentListener(listener);
}
return editor;
return super.prepareEditor(editor, row, column);
}
};
@@ -86,4 +86,8 @@ public class CodeFragmentTableCellEditorBase extends AbstractCellEditor implemen
public void addDocumentListener(DocumentListener listener) {
myListeners.add(listener);
}
public void clearListeners() {
myListeners.clear();
}
}
@@ -62,4 +62,8 @@ public class StringTableCellEditor extends AbstractCellEditor implements TableCe
public void addDocumentListener(DocumentListener listener) {
myListeners.add(listener);
}
public void clearListeners() {
myListeners.clear();
}
}