sciaboletta ha scritto:
La finestra da me fatta ha delle JTexFfield su cui ho attivato una classe esterna per il KeyListener per controllare ogni tasto digitato.
Non so per quale motivo esatto stai usando KeyListener. Il KeyListener sui JTextField raramente è utile. E comunque non è così "completo" come si possa pensare. Perché quando fai una operazione di "incolla" su un JTextField, i caratteri incollati non "passano" per un KeyListener.
Se si vuole ricevere notifica di qualunque (proprio qualunque!) modifica nel JTextField, l'unica è registrare un DocumentListener sull'oggetto Document che ciascun JTextField possiede (il Document è il "model" dei campi di testo in Swing).
sciaboletta ha scritto:
Ora per far partire il metodo che attiva questi controlli , devo per forza gestire un evento e se si quale?
Quello che dicevo poco fa:
DocumentListener
Ma il punto non è quello. Quando ci sono interazioni tra più componenti come quella che hai detto ma per fare anche altri esempi: "abilitare un textfield se un checkbox è marcato" / "abilitare un pulsante se almeno un textfield su 4 ha dei dati" ecc...
purtroppo su questi aspetti i framework AWT/Swing NON sono affatto di aiuto. Non offrono nulla direttamente per questo, va tutto gestito a manina con un po' di listener e di codice per queste "logiche". E può non essere banale né facilmente riusabile.
Sarebbe bello se ci fosse una "ipotetica" API (magari una
fluent API) come la seguente:
GuiInteractions guiInteractions = new GuiInteractions();
guiInteractions.newInteraction()
.whenNotEmpty(textField1)
.whenNotEmpty(textField2)
.thenEnable(button1);
Una API del genere sfortunatamente non esiste. Non in AWT/Swing. E non ho idea se esiste una libreria esterna che possa offrire qualcosa del genere.
Ma la puoi scrivere, nel modo che ho ipotizzato o in un altro diverso. Il punto è se
vale la pena. Se lo fai per una sola finestra e per pochi componenti, no di certo. Se avessi 4+ finestre con svariati componenti ... allora molto probabilmente ha senso.