Modifia interfaccia Grafica AWT

di il
2 risposte

Modifia interfaccia Grafica AWT

Buongiorno a Tutti.
Avendo un pò di tempo libero a disposizione , mi sto dedicando all'apprendimento di JAVA , vengo da programmazione procedurale per la gestione dei Dati. Data la mia esperienza ho subito pensato ad una finestra per l'inserimento di dati anagrafici da salvare su un DB Relazionale.
Utilizzando Swing , AWT mi è stato tutto molto semplice.
Ora però c'è una cosa che non riesco proprio a risolvere e non capisco se è una mia Forma Mentis data dalla modalità con cui ho sempre programmato o un approccio totalmente sbagliato alla problematica.
La finestra da me fatta ha delle JTexFfield su cui ho attivato una classe esterna per il KeyListener per controllare ogni tasto digitato.
Ed ho tre Jbutton sempre attivi "Cerca" , "Inserisci" e "Modifica".
La cosa funziona , ora volevo gestire l'attivazione di questi tre tasti a seconda di ciò che avviene sulla finestra , quindi tasti spenti all'avvio della finestra e ad esempio se tutti i campi sono compilati attivare il tasto di inserimento.
Ora per far partire il metodo che attiva questi controlli , devo per forza gestire un evento e se si quale?
E' possibile far partire l'esecuzione di un metodo dopo la fine delle istruzioni di una classe attivata da un evento(ascoltatore) ogni volta che questo avviene ?
Non riesco ad uscirne , l'unico modo che mi è venuto in mente è controllare con il Focuslistener il valore delle Jtext e far partire il metodo per il controllo dei tasti con il Keylistener , ma perderei il controllo di ogni tasto premuto sulla Jtext che mi serve.

Spero si capisca ciò che ho scritto, nella mia testa vi giuro che è tutto chiaro!!!

Grazie per qualsiasi tipo di risposta.

2 Risposte

  • Re: Modifia interfaccia Grafica AWT

    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.
  • Re: Modifia interfaccia Grafica AWT

    Grazie mille per la risposta veramente esaustiva.
    Ho utilizzato il KeyListener per complicarmi la vita!
    Essendo uno studio , volevo provare i vari listener. Ho gestito la stessa finestra anche con il FocusListener.
    Con il Key listener sono anche riuscito ad intercettare il tasto CTRL premuto precedentemente agli altri tasti e quindi a gestire i copia ed incolla, cosi come ho intercettato le varie Frecce per permettere al cursore di muoversi e i vari tasti speciali. Mi è stato utile a capire come si comporta Java.
    Ora provo a gestire questa storia con il DocumentListener e a questo punto poi a gestire la finestra con questo ascoltatore.

    Graie ancora dell'aiuto.
Devi accedere o registrarti per scrivere nel forum
2 risposte