Ho una serie di JTextComponent che l'utente deve riempire. Una volta che sono tutte "piene" si deve attivare il bottone di salvataggio.

Per fare questo ho creato questo piccolo listener:

codice:
        class ValidatorListener extends KeyAdapter {
            private JTextComponent[] components = new JTextComponent[4];

            ValidatorListener() {
                components[0] = (JTextComponent) categoriesComboBox.getEditor().getEditorComponent();
                components[1] = nameTextField;
                components[2] = tagsTextField;
                components[3] = codeEditor;
            }

            public void keyTyped(KeyEvent e) {
                boolean enabled = true;

                for (JTextComponent c : components) {
                    enabled &= (c.getText() + (e.getSource() == c ? e.getKeyChar() : "")).trim().length() != 0;
                }

                saveButton.setEnabled(enabled);
            }
        }
In pratica ad ogni nuovo tasto premuto controllo se è tutto ok ed eventualmente attivo il bottone.

1. Così com'è ora non mi sembra granchè... Come potrei renderlo migliore?
2. Problema "grave": se il contenuto di uno dei JTextComponent viene tagliato (CTRL/COMMAND + X) il bottone rimane attivo quando invece dovrebbe disabilitarsi. Se cancello con il backspace invece nessun problema. Come potrei risolvere questo problema?

Grazie