Chcem, aby môj model vykonal akciu X keď stlačím klávesu. Ako to urobiť?Je možné vykonať akciu ako odpoveď na stlačenie klávesy keď má DisplaySurface alebo
Controller (napríklad nástrojová lišta) fokus. Ktoré z toho si vyberiete, záleží od toho,
čo je vhodnejšie pre vašu akciu. Napríklad ak si želáte urobiť niečo so zobrazením v DisplaySurface ,
priraďte kód na obsluhu stlačenia klávesy do triedy implementujúcej DisplaySurface . Kód, ktorý
vykonáva obsluhu stlačenia klávesy, je v oboch prípadoch rovnaký. Napríklad:
Controller c = (Controller)this.getController();
c.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent evt) {
if (evt.getKeyCode() == KeyEvent.VK_K) {
System.out.println("k key typed");
}
}
});
vypíše na konzolu "k key typed " kedykoľvek bude mať nástrojová lišta fokus a bude stlačená
klávesa k . Na vyvolanie tej istej akcie ak má fokus DisplaySurface , je možné
nahradiť referenciu do objektu Controller referenciou do objektu DisplaySurface .
Takže:
myDisplaySurface.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent evt) {
if (evt.getKeyCode() == KeyEvent.VK_K) {
System.out.println("k key typed");
}
}
});
Typické miesto na umiestnenie tohto kódu je metóda setup() v modeli. Tak je zabezpečené, že obsluha
stlačenia klávesy bude aktívna skôr, ako bude simulácia spustená. Poznamenajme, že KeyAdapter
a KeyEvent sa nachádzajú v balíku java.awt.event a preto ich je potrebné importovať
do modelu. Pridanie objektu KeyListeners týmto spôsobom je v Jave štandardné a hociktorá kniha
o Jave poskytuje viacej detailov.
|