JSem: 4.5
|
KeyEvent, FocusEvent
Gli eventi della tastiera (keyEvents) sono generati, quando l'utente preme o rilascia un tasto, dal componente che ha il focus della tastiera. Più precisamente ci sono due tipi di eventi: la battitura di un carattere Unicode e il premere o rilasciare un tasto. Il primo è un key-typed event, gli altri sono dei key-pressed, key-released event (nb: un key-typed event comprende comunque un key-pressed e un key-released event).
Anche se è preferibile limitarsi agli eventi di tipo key-pressed, ci sono situazioni (video giochi) in cui è indispensabile sapere se l'utente ha premuto tasti speciali (F1, freccia giù, su, ecc...) e in questi casi ci vuole un key-pressed event.
Per generare degli eventi dalla tastiera, un componente deve avere il focus della tastiera (in certe situazioni questo non sembra indispensabile (TextArea e key-typed event dell'applet della pagina precedente)).
Fare guadagnare il focus a un componente non è sempre così facile perchè dipende anche dal sistema locale. Comunque dopo essersi assicurati che il componente è in grado di guadagnare il focus, il modo più sicuro è di usare un MouseListener che chiama requestFocus quando il componente è cliccato.
Per illustrare il tutto ecco un'applet che fà le seguenti cose:
dopo avere cliccato sull'applet, l'applet guadagna il focus ed è possibile spostare il quadrato blu usando i tasti "freccia"; inoltre premendo il tasto 'n' (risp. 'v', 'b', 'r') il quadrato diventa nero (risp. verde, blu, rosso). Da notare l'uso dei codici per i tasti: VK_UP, VK_LEFT ecc... (VK sta per Virtual Keyboard); queste sono costanti definite nella classe KeyEvent (vedere la doc). Questa applet è una buona base per un video gioco.
Codice completo
Applet o applicazione?
Certe volte è preferibile avere un programma sotto forma di applicazione, questo presenta, per esempio, il vantaggio di avere una finestra più grande (uno non è più limitato dalle dimensioni del browser). Quindi applet o applicazione? La risposta è: entrambi! Infatti un'applet può girare anche come applicazione, basta che abbia un blocco main e che il display avvenga in una finestra, però attenzione! Quando si apre una finestra, bisogna poi essere in grado di chiuderla! Per questo si usa un WindowListener, questa interfaccia ha tanti metodi e quindi è proprio l'occasione per usare un Adapter.
Quindi affinchè la nostra applet, per esempio l'applet Disegno dell'esercizio 5, possa girare anche come applicazione, basta aggiungere il seguente codice:
public static void main(String[] arg){
Frame f = new Frame("Disegno");
f.addWindowListener(new WindowAdapter(){
/*Qui, dopo {, inizia la definizione della classe (interna)
con un solo metodo*/
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
Disegno app = new Disegno();//istanza dell'applet
app.init();//inizializzazione dell'applet
f.add("Center",app);//il layout di default di un frame è borderlayout
f.setSize(800,600);//imposta le dimensioni della finestra
f.setVisible(true);
}
|
|