Obsah
Komponenty GUI v Javě
Řízení událostmi a asynchronní programování
Typy událostí
Posluchači událostí, anonymní vnitřní třídy
V Javě lze psát přenositelné aplikace s "okenním" rozhraním - s GUI
při jejich vývoji se s výhodou uplatní prostředí IDE - „builder“, např. JBuilder, Sun Studio ONE, NetBeans...
V tomto kurzu budeme pracovat s moderním Swing GUI, což je součást JFC (Java Foundation Classes). Starší variantou - dosud živou v Javě verzí 1.1.x, je grafické rozhraní nad komponentami AWT (Abstract Windowing Toolkit).
Základním principem tvorby aplikací s GUI je řízení programu událostmi.
Netýká se však pouze GUI, je to obecnější pojem označující typ asynchronního programování, kdy je:
Postup (životní cyklus události):
Událost vznikne (typicky uživatelskou akcí nad komponentou GUI).
Na komponentu musí být "zavěšen" posluchač dané události (event listener).
Systém vyvolá příslušnou metodu posluchače - my tu metodu obvykle smysluplně implementujeme tak, aby realizovala potřebnou akci.
Viz též příklad -První GUI aplikace
Aby událost mohla být ošetřena, tj. mohlo se na ni někde reagovat, je třeba k dané komponentně přidat objekt posluchače událostí.
Velmi často - a skoro nikde jinde - se jako objekt posluchače používá objektu anonymní vnitřní třídy:
Třída je (jakoby „on-the-fly“) definována a ihned - jen jedenkrát! - použita.
Ve skutečnosti samozřejmě se daná třída (její bajtkód) vytvoří a přeloží s ostatními hned ve fázi překladu mateřské třídy.
V případě posluchačů události obvykle vnitřní třída má jen jednu metodu.
Proč vůbec pomocí vnitřní třídy?
vnitřní třída má přístup k (i chráněným) prvkům mateřské třídy!
poněkud nepřehledné, třída je skryta v ostatním kódu
navíc: pokud si speciálně nepamatujeme odkaz na jednou vytvořený a zapojený posluchač, pak jej nelze z paměti odstranit - nemáme na něj odkaz
V následujícím úryvku kodu se:
okno.addWindowListener( new WindowListener() {
public void windowClosing(WindowEvent e) { System.exit(0); } } );
...vytvoří jedna instance anonymní vnitřní třídy a ta se předá/použije jako posluchač událostí.
class
MyWindowListener implements WindowListener { public void
windowClosing(WindowEvent e) { System.exit(0); } } ...
okno.addWindowListener(new MyWindowListener());
Tvorba Swing-GUI aplikací - Trail: Creating a GUI with JFC/Swing
Tvorba appletů - Trail: Writing Applets
Vytváření aplikací přístupných i uživatelům s omezeními:
potíže se zrakem
problémy s ovládáním myši...viz JFC-Accessibility
Vynikající článek o GUI v Javě: Ray Toal: Developing Complex User Interface Applications in Java