Prírodou inšpirované algoritmy

študijné materiály pre projekt mobilnej triedy umelej inteligencie

Späť ku kurzom triedy
Obsah
Ako urobiť spustiteľnú aplikáciu v jednom .jar súbore?
Ako je možné zastaviť alebo pozastaviť simuláciu z vnútra modelu?
Agenti zobrazujú príliš veľa informácií, keď sú sondované. Ako ich môžem limitovať?
Ako je možné pridať do lišty nástrojov v RePast-e svoje vlastné tlačidlo?
Chcem, aby môj model vykonal akciu X keď stlačím klávesu. Ako to urobiť?
Chcem, aby môj model vykonal akciu X pri kliknutí na tlačidlo na nástrojovej lište. Ako to urobiť?
Chcem vytvoriť vlastný Display. Aký je najlepší spôsob?
Ako má vyzerať metóda main v spustiteľnej triede modelu?



Ostatné kapitoly
Swarm
RePast
LEM
SDML
Eos
DDLab


Tutoriály
 Celulárne automaty
 Morfogenéza
 Simulátory
 Evolučné algoritmy
 Chaos
 Roboty
 Rôzne


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.

Hore
Kontakt: Marek Bundzel