Guida alla programmazione delle GUI, interfacce grafiche in Java 2D - 5: catturare gli eventi da mouse e tastiera
Capitolo 05: Catturare gli eventi da mouse e tastiera.
In questo capitolo parleremo della gestione degli eventi generati mediante mouse e tastiera.
Per gestire gli eventi da tastiera abbiamo a disposizione i seguenti strumenti:
- KeyEvent, classe utilizzata per definire gli eventi (Java 'mappa' i tasti della tastiera su di un insieme di costanti predefinite);
- KeyListener, listener (interfaccia) degli eventi, che ci 'obbliga' a riscrivere tre metodi;
- KeyAdapter, classe Adapter che ci consente di riscrivere solo i metodi che ci servono dei tre 'obbligatori' di Listener.
Iniziamo dal set di costanti di KeyEvent: tali costanti sono tutte del tipo
- VK_A, ..., VK_Z --- per le lettere (NOTA: VK sta per 'virtual key', 'tasto virtuale', ad indicare che si tratta della rappresentazione interna di Java);
- VK_0, ..., VK_9 --- per i tasti numerici;
- VK_PAGE_UP, VK_PAGE_DOWN, ... --- tutti gli altri tasti hanno nomi specifici;
più altri valori che consentono di verificare se sono stati attivati dei modificatori (shift, ctrl, alt, ...); per un elenco completo, si rimanda alla documentazione ufficiale.
KeyEvent ci permette di individuare quale tasto è stato premuto mediante i metodi:
| getKeyCode() : int |
Restituisce il valore (vd. costanti predefinite sopra) associato al tasto premuto. |
| getKeyChar() : char |
Restituisce il valore letterale (char) del tasto premuto. |
| getKeyText(int code) : String (metodo statico) |
Restituisce il valore sotto forma di String del codice di tasto passato come parametro. |
I metodi di KeyListener da implementare sono i seguenti:
| keyPressed(keyEvent e) : void |
Pressione di un tasto. |
| keyReleased(keyEvent e) : void |
Tasto rilasciato. |
| keyTyped(keyEvent e) : void |
Tasto 'digitato'. |
Nel prossimo capitolo vedremo come creare e visualizzare un JFrame: potrete implementare e testare l'interfaccia KeyListener partendo dalla classe che verrà presentata in quella sede (per verificare la cattura degli eventi, potete utilizzare il metodo System.out.println per stampare a video un messaggio).
In maniera del tutto analoga a quanto visto per la tastiera, è possibile gestire gli eventi generati mediante mouse con i seguenti strumenti:
- MouseEvent; classe utilizzata per definire gli eventi;
- MouseListener, MouseMotionListener, MouseInputListener; vari listener (interfacce) delle azioni effettuate dal mouse (il più utilizzato, comunque, è il primo: MouseListener);
- MouseAdapter, MouseMotionAdapter, MouseInputAdapter; classi adapter che implementano i listener appena elencati.
La classe MouseEvent fornisce i seguenti metodi per recuperare alcune informazioni utili:
| getButton() : int |
Restituisce il codice del bottone premuto. |
| getClickCount() : int |
Restituisce il numero di click 'consecutivi' effettuati. |
| getPoint() : Point |
Restituisce le coordinate del pixel cliccato su schermo organizzate sotto forma di oggetto Point. |
| getX() : int |
Restituisce la coordinata X del pixel cliccato su schermo. |
| getY() : int |
Restituisce la coordinata Y del pixel cliccato su schermo. |
Implementando MouseListener, occorrerà riscrivere i seguenti metodi (significati ovvi):
- mouseClicked(MouseEvent e) : void
- mouseEntered(MouseEvent e) : void
- mouseExited(MouseEvent e) : void
- mousePressed(MouseEvent e) : void
- mouseReleased(MouseEvent e) : void
Una considerazione relativa al mouse: in Java è possibile impostare l'aspetto che dovrà assumere il cursore del mouse al passaggio sulle varie componenti.
La classe che gestisce l'aspetto del cursore è Cursor, con costruttore principale:
Cursor(int type) : void
mentre, per impostare il cursore di un componente, bisogna utilizzare il metodo di Component:
setCursor(Cursor c) : void
Java mette a disposizione diversi cursori predefiniti, tutti identificati mediante costanti intere definite nella classe Cursor (è a tali costanti che fa riferimento il parametro intero type presente nel costruttore di Cursor precedentemente trattato); è comunque possibile creare aspetti personalizzati per il cursore del mouse mediante il metodo di Toolkit:
createCustomCursor(Image cursor, Point hotSpot, String name) : Cursor
che permette di impostare l'Image cursor passata come parametro come aspetto visivo del cursore, hotSpot come punto sensibile e name come nome.
|