• Regolamento Macrocategoria DEV
    Prima di aprire un topic nella Macrocategoria DEV, è bene leggerne il suo regolamento. Sei un'azienda o un hosting/provider? Qui sono anche contenute informazioni per collaborare con Sciax2 ed ottenere l'accredito nella nostra community!

Guida Awt- Classi Adapter e Frame

TBH

Utente Master
Autore del topic
24 Dicembre 2012
2.134
115
Miglior risposta
0
Riprendiamo le guide sulla grafica e l'awt. Oggi parleremo delle classi Adapter. In modo da ottimizzare il codice,infatti quando implementavamo una qualsiasi interfaccia per la gestione eventi rimanevano metodi inutilizzati che , comunque dovevano essere ridefiniti. Quindi le classi Adapter implementano tale intefaccie e quando le ereditiamo possiamo liberamente decidere di ridefinire solo i metodi che ci servono. Per questo motivo vediamo come riscrivere l'applicazione che gestiva l'evento del mouse. Questa volta utilizzeremo i Frame.

I Frame

Nella gestione dei Frame dobbiamo tener conto anche di altri eventi. Appunto gli Eventi descritti nella classe WindowEvent. Ma per ora limitiamo a vedere come usare una classe Adapter comune. Iniziamo da MouseAdapter che implementa l'interfaccia MouseListener,descitta nella guida precedente.

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

Classe per la gestione evento mouse

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

Iniziamo a notare , che è ricomparso il main cosa che non è presente nelle Applet.
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

Nel main istanziamo la classe stessa appunto perché eredita da Frame , dopo aver creato la nostra finestra impostiamo le dimensioni e infine usiamo setVisible per mostrare la finestra. Le versioni precedenti a JDK 5 usavano un metodo obsolete che è Show, quindi per chi è abituato al Net , tale metodo in java non è più usato. Di seguito elenco alcuni metodi che potrebbero tornare utili nella gestione di un Frame

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

Ora passiamo al costruttore di Appexe

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

aggiungiamo il gestore MouseListener, facendoci restituire il riferimento della classe Gestore , che accetta come parametro la nostra classe.Quindi passiamo ad analizzare la classe che gestisce il click del mouse.

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!



Il codice è estremamente semplice , ma non Ottimizzato infatti questa gestione d'eventi richiede uno spreco maggiore di memoria, ma è la versione più leggibile. Prima di ottimizzare questo codice dobbiamo gestire l'evento di chiusura del Frame a questo punto dovremmo lavorare con l'interfaccia WindowListener, ma come detto già sopra se implementiamo tale interfaccia dobbiamo ridefinire anche tutti e sette i metodi e ciò rende meno leggibile il codice, per questo motivo optiamo per la classe WindowAdapter. Quindi gestiamo semplicemente l'evento di chiusura

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

a questo punto nel costruttore di Appexe basta aggiungere :

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

Ottimizzare il codice

Ora passiamo a cercare di rendere il codice più compatto e ottimizzato , riducendo però la leggibilità di quest'ultimo. Ide come netbeans che permetto di creare interfaccie grafiche Drag&Drop scrivono sempre in maniera compatta ed ottimizzata , nel caso dovessimo scrivere parte dell'interfaccia manualmente o tutta l'interfaccia grafica è buona abitudine scrivere nel miglior modo possibile. Infatti le classi anonime senza nome vengono utilizzate moltissimo nel settore della GUI sia in ambito awt e java.swing. Infatti quest'ultime permettono di risparmiare nomi aggiuntivi , inutile righe di codice e l'importazione ripetitiva dei package awt e awt.event

Vediamo come riscrivere il programma precedente usando tale tecnica.

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

La leggibilità del codice si è ridotta moltissimo ,in quanto nello stesso metodo della funzione creiamo una classe senza nome e con all'interno i metodi che ci servono.Inoltre le Classi Interne possono accedere ai membri della classe nel quali sono contenute.

Con questo è tutto ci vediamo nella prossima guida :bye:
 
  • Like
Reactions: 1 person