07.06.2015 Views

Untitled - Vitajte na stránkach www.einsty.hostujem.sk

Untitled - Vitajte na stránkach www.einsty.hostujem.sk

Untitled - Vitajte na stránkach www.einsty.hostujem.sk

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Java pod lupou<br />

16. èas : Balík java.awt (dokonèenie)<br />

V predchádzajúcom pokraèovaní sme zabudli spomenú ešte dve výz<strong>na</strong>mnejšie pomocné<br />

triedy. Prvá z nich, Dimension, predstavuje zapuzdrenie šírky a výšky komponentu do<br />

jedného objektu. Druhá s názvom Toolkit je podstatne komplexnejšia a dá sa poveda ,<br />

že reprezentuje implementáciu AWT. Nájdeme v nej množstvo metód <strong>na</strong> vytváranie<br />

<strong>na</strong>tívnych komponentov, ale aj užitoèné metódy getScreenSize() a getScreenResolution()<br />

<strong>na</strong> zistenie parametrov obrazovky, getImage(), createImage(), prepareImage()<br />

a checkImage() <strong>na</strong> prácu s obrázkami, metódu beep(), ktorá generuje<br />

systémové „pípnutie“, a mnoho ïalších.<br />

MENU KOMPONENTY. Na prácu s menu slúži <strong>sk</strong>upi<strong>na</strong> tried so spoloèným predkom,<br />

abstraktnou triedou MenuComponent. Každý menu komponent má svoj názov, ktorý<br />

môžeme zisti a <strong>na</strong>stavi dvojicou metód (get|set)Name(). Metóda getParent() vracia<br />

rodièov<strong>sk</strong>ý kontajner, v ktorom je zadaný komponent obsiahnutý, metódy (get|set)<br />

Font() slúžia <strong>na</strong> zistenie a <strong>na</strong>stavenie fontu použitého v menu komponente.<br />

Obyèajné, ïalej nerozbalite¾né položky menu predstavuje trieda MenuItem. Pri konštrukcii<br />

položky zadávame ako parameter textový re azec, ktorý sa zobrazí v menu. Tento<br />

re azec môžeme ne<strong>sk</strong>ôr zis ova a <strong>na</strong>stavova metódami (get|set)Label(). Položky<br />

môžu by <strong>na</strong>stavené ako neaktívne (a obyèajne zobrazené svetlou, nevýraznou farbou)<br />

volaním metódy setE<strong>na</strong>bled(). Pomocou metód (get|set)ActionListener()<br />

môžeme k položke pripoji príslušný listener.<br />

Špeciálnym prípadom položky menu je trieda CheckboxMenuItem (odvodená od<br />

MenuItem). Tá obsahuje <strong>na</strong>vyše binárny stav, indikovaný zaškrtávacou z<strong>na</strong>èkou. Stav<br />

môžeme zis ova a <strong>na</strong>stavova pomocou metód (get|set)State().<br />

Základným typom menu kontajnera je trieda Menu, ktorá reprezentuje vertikálne<br />

menu. Jednotlivé položky menu musia by typu MenuItem, a keïže samotná trieda Menu<br />

je potomkom triedy MenuItem, nie je problém vytvori hierarchickú štruktúru menu jednoduchým<br />

<strong>sk</strong>ladaním. Objekt triedy Menu má svoj názov a môže predstavova oddelite¾né<br />

(tear-off) menu. Túto <strong>sk</strong>utoènos indikuje metóda isTearOff(). Z ïalších metód<br />

getItemCount() vracia poèet položiek v kontajneri, getItem() sprístupòuje jednotlivé<br />

položky, add(), insert() a remove() slúžia <strong>na</strong> pridávanie alebo odoberanie položiek.<br />

Špeciálnym typom položiek sú odde¾ovacie pruhy, ktoré pridávame pomocou metód<br />

addSeparator() a insertSeparator().<br />

Vodorovný pruh s položkami menu implementuje trieda MenuBar. Jednotlivé položky<br />

musia by typu MenuItem (plus všetkých jeho potomkov). Objekt triedy MenuBar sa pripája<br />

ku komponentom typu Frame pomocou metódy Frame.setMenuBar(). Na pridávanie<br />

a odoberanie položiek menu máme k dispozícii metódy add() a remove(), poèet<br />

položiek v menu zistíme volaním getMenuCount().<br />

V AWT možno vytvára aj kontextové menu, ktoré nemusia by súèas ou vodorovného<br />

menu ok<strong>na</strong>, ale môžu by zobrazené <strong>na</strong> zadanej pozícii. Takéto menu sú objektmi triedy<br />

PopupMenu, ktorá je odvodená od Menu; zobrazenie menu má <strong>na</strong> starosti metóda show().<br />

Ukážme si ešte krátky príklad, ako zostroji základné menu s dvoma podmenu File a<br />

Help a s nieko¾kými položkami (predpokladáme, že uvedený kód je súèas ou konštruktora<br />

ok<strong>na</strong> – kompletný príklad možno tradiène nájs <strong>na</strong> webe):<br />

Menu mnFile = new Menu(„File“);<br />

mnFile.add(new MenuItem(„New“));<br />

mnFile.add(new MenuItem(„Open...“));<br />

mnFile.add(new MenuItem(„Save“));<br />

mnFile.add(new MenuItem(„Save as...“));<br />

mnFile.addSeparator();<br />

mnFile.add(new MenuItem(„Exit“));<br />

Menu mnHelp = new Menu(„Help“);<br />

mnHelp.add(new MenuItem(„About...“));<br />

MenuBar mb = new MenuBar();<br />

mb.add(mnFile);<br />

mb.add(mnHelp);<br />

setMenuBar(mb);<br />

P R O G R A M U J E M E<br />

ROZHRANIA JAVA.AWT. Z rozhraní balíka java.awt za zmienku stoja <strong>na</strong>sledujúce:<br />

Adjustable reprezentuje objekty, ktoré umožòujú zmenu èíselnej hodnoty v<br />

stanovenom rozsahu. Z balíka java.awt je takým objektom trieda Scrollbar. Rozhranie<br />

ItemSelectable predstavuje objekty obsahujúce zoz<strong>na</strong>m položiek, ktoré možno<br />

nejakým spôsobom „vybra “ – ako <strong>na</strong>príklad triedy List, Checkbox èi Choice.<br />

Rozhranie MenuContainer implementujú všetky triedy, ktoré fungujú ako menu kontajnery.<br />

Okrem Menu a MenuBar je to tiež trieda Frame a <strong>na</strong> úèely prípadného rozširovania<br />

aj trieda Component.<br />

Všetky triedy, ktoré dokážu rozmiestòova komponenty v kontajneroch, implementujú<br />

rozhranie LayoutMa<strong>na</strong>ger. Potomkom tohto rozhrania je LayoutMa<strong>na</strong>ger2, opisujúci<br />

triedy, ktoré vedia rozmiestòova komponenty aj <strong>na</strong> základe zadaných obmedzení.<br />

CHYBY A VÝNIMKY. Vážnu, neopravite¾nú chybu AWT indikuje objekt triedy<br />

AWTError, odvodenej od triedy Error. Tá, ako vieme, predstavuje chyby, pri ktorých sa<br />

nepredpokladá obnovenie normálnej èinnosti programu a nie je nevyhnutné ich zachytáva<br />

. Bežné výnimky AWT sú <strong>na</strong>proti tomu sig<strong>na</strong>lizované triedou AWTException. Okrem<br />

nej nájdeme v balíku java.awt ešte výnimky FontFormatException (chyba vo formáte<br />

súboru s definíciou písma) a IllegalComponentStateException (indikuje neplatný<br />

stav komponentu).<br />

TRIEDY UDALOSTÍ. Ïalej sa budeme venova podbalíku java.awt.event, ktorý<br />

obsahuje triedy a rozhrania urèené <strong>na</strong> obsluhu udalostí GUI. Spoloèným predkom pre<br />

triedy udalostí v AWT je trieda AWTEvent (patriaca však do balíka java.awt). Inštancie<br />

tejto triedy, resp. jej potomkov, nevytvára programátor, ale samotný systém ako reakciu<br />

<strong>na</strong> vý<strong>sk</strong>yt rôznych udalostí. Každý typ udalosti je identifikovaný celým èíslom, uloženým v<br />

chránenom èlene id. Jeho hodnotu zistíme pomocou metódy getID(). Ve¾mi èasto je<br />

nevyhnutné urèi konkrétny typ udalosti práve <strong>na</strong> základe jej identifikaèného èísla.<br />

„Akèné“ udalosti, ako <strong>na</strong>príklad kliknutie <strong>na</strong> objekt Button, reprezentuje trieda<br />

ActionEvent. Pomocou metódy getActionCommand() môžeme zí<strong>sk</strong>a príkazový<br />

re azec, asociovaný k akcii (rôzne tlaèidlá budú ma obyèajne priradené rôzne re azce,<br />

pod¾a èoho môžeme jednoducho identifikova , ktoré tlaèidlo bolo stlaèené); metóda<br />

getModifiers() vracia stav modifikaèných klávesov (Shift a pod.) v okamihu vý<strong>sk</strong>ytu<br />

udalosti.<br />

Trieda AdjustmentEvent predstavuje udalosti generované triedami, ktoré implementujú<br />

rozhranie Adjustable, ako <strong>na</strong>príklad trieda Scrollbar. Pomocou metódy<br />

getAdjustable() zí<strong>sk</strong>ame objekt, ktorý udalos spôsobil, getValue() vracia aktuálnu<br />

„hodnotu“ objektu (pri posuvníku je to poloha jazdca) a getAdjustmentType() použijeme<br />

<strong>na</strong> bližšie urèenie typu udalosti.<br />

Ïalšia trieda ComponentEvent zastupuje udalosti, ako posun, zmenu ve¾kosti a vidite¾nosti<br />

komponentu a podobne. Tieto udalosti sú urèené len <strong>na</strong> informaèné úèely – systém<br />

sa postará o zodpovedajúce prekreslenie komponentov sám.<br />

Trieda ComponentEvent má nieko¾ko potomkov. Prvým z nich je trieda Container-<br />

Event, ktorá predstavuje udalosti týkajúce sa kontajnerov (opä je urèená len <strong>na</strong> informaèné<br />

úèely). FocusEvent reprezentuje zí<strong>sk</strong>anie a stratu fokusu (ak má komponent<br />

fokus, z<strong>na</strong>mená to, že doò budú smerované všetky vstupy z klávesnice; fokus sa obyèajne<br />

znázoròuje vizuálne – ako bodkovaný obdåžnik èi silnejšie orámovanie).<br />

Ïalší potomok InputEvent slúži ako spoloèný predok pre udalosti vstupu z klávesnice<br />

alebo myši. Pomocou nieko¾kých metód môžeme zisti stav modifikaèných klávesov v<br />

okamihu vý<strong>sk</strong>ytu udalosti. Udalosti klávesnice bližšie špecifikuje odvodená trieda Key-<br />

Event. Tieto udalosti sú troch typov: stlaèenie klávesu, uvo¾nenie klávesu a „vstup<br />

z<strong>na</strong>ku“. Tretí typ udalosti býva dôsledkom vý<strong>sk</strong>ytu prvých dvoch typov, v rôznych kombináciách<br />

(<strong>na</strong>príklad udalosti „vstup z<strong>na</strong>ku A“ predchádzajú udalosti „stlaèenie Shift“,<br />

„stlaèenie a“, „uvo¾nenie a“ a „uvo¾nenie Shift“). Príslušný z<strong>na</strong>k a jeho kód zí<strong>sk</strong>ame volaním<br />

metód getKeyChar() a getKeyCode(), slovný ekvivalent kódu z<strong>na</strong>ku (ako <strong>na</strong>príklad<br />

„F1“) volaním metódy getKeyText(). Ïalšie metódy setKeyChar(), setKeyCode() a<br />

setModifiers() umožòujú zmeni kód z<strong>na</strong>ku, ako keby bol stlaèený úplne iný kláves.<br />

Udalosti myši, ako jej pohyb, prechod <strong>na</strong>d komponentom, stlaèenie a uvo¾nenie tlaèidiel,<br />

sú reprezentované triedou MouseEvent. Polohu myši zistíme pomocou metód<br />

getX() a getY(), poèet kliknutí vracia metóda getClickCount() (jednoduché i dvojité<br />

kliknutie majú rov<strong>na</strong>ký identifikátor MOUSE_CLICKED, líšia sa v návratovej hodnote<br />

tejto metódy). Metóda isPopupTrigger() indikuje, èi daná udalos slúži ako povel <strong>na</strong><br />

zobrazenie kontextového menu pre danú platformu.<br />

Trieda PaintEvent existuje v súvislosti s prekres¾ovaním komponentov, používa ju<br />

však systém, nie programátor. Poslednou komponentovou udalos ou je trieda Window-<br />

Event, indikujúca zmeny stavu ok<strong>na</strong> (otvorenie, zavretie, maximalizáciu, minimalizáciu a pod.).<br />

12/2001 PC REVUE 147

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!