12.07.2015 Views

CES 2004 - Vitajte na stránkach www.einsty.hostujem.sk

CES 2004 - Vitajte na stránkach www.einsty.hostujem.sk

CES 2004 - 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.

P R O G R A M U J E M E// sem vlote defíniciu triedy DocumentFilter}V tomto príklade staèí <strong>na</strong> urèené miesta vloi definície potrebných tried filtrov, ktorésom u uviedol, prípadne ich uloi do osobitných súborov a zabezpeèi z tejto aplikácieprístup k nim. Výsledok po <strong>sk</strong>ompilovaní a spustení máte monos vidie <strong>na</strong> obrázku è. 1.POH¼ADY PRE JFILECHOOSER. Ako som u v tomto seriáli spomenul, archi−tektúra MVC umoòuje definova viacero poh¾adov <strong>na</strong> dáta reprezentované modelom.Súbory zobrazované súborovým dialógom môeme tie poklada za dáta alebo údaje,reprezentované súborovým systémom. Zobrazenie týchto súborov v konkrétnom dialó−gu a v konkrétnej podobe povaujeme za poh¾ad <strong>na</strong> tieto dáta. Trieda JFileChooserumoòuje do z<strong>na</strong>ènejmiery poh¾ad parametri−zova, a teda meni takjeho vzh¾ad. Teraz sa ne−budeme venova vzh¾a−du súèastí dialógu, o kto−ré sa stará UI ma<strong>na</strong>ér (te−da vzh¾ad a farba tlaèi−diel, èiar a ostatných kom−ponentov), ale vzh¾adukomponentu obsahujú−ceho zoz<strong>na</strong>m súborov.Vlastne len tento kom−Obr. 2ponent predstavuje po−h¾ad <strong>na</strong> súbory.JFileChooser umoòuje upravi poh¾ad <strong>na</strong> súbory prostredníctvom triedy FileView. Tá−to trieda je umiestnená spolu s ostatnými triedami <strong>na</strong> podporu JFileChooser v balíèkujavax.swing.filechooser. Táto abstraktná trieda definuje pä metód, ktoré by ste maliimplementova (prekry), aby ste dosiahli iadanú funkcio<strong>na</strong>litu, resp. elaný poh¾ad <strong>na</strong>súbory. Kadá z metód preberá jediný parameter, ktorým je odkaz <strong>na</strong> inštanciu triedy File,ktorá reprezentuje súbor. Takáto inštancia je postupne vytvorená pre kadý súbor a odo−vzdaná triede poh¾adu, teda princíp je podobný ako pri filtroch, kde kadý súbor bol odo−vzdaný aktívnemu filtru ako inštancia triedy File a filter rozhodol, èi súbor bude zobraze−ný, alebo nie. V prípade poh¾adov je situácia obdobná, rozdiel spoèíva len v tom, e filterrozhodoval, èi súbor má by zobrazený v zoz<strong>na</strong>me, alebo nie, zatia¾ èo poh¾ad rozhodu−je, èi súbor bude zobrazený štandardným spôsobom, definovaným UI ma<strong>na</strong>érom, alebo ne−jakým špecifickým spôsobom. Kritérium rozdelenia opä urèuje programátor, ale <strong>na</strong>jèas−tejšie to bude pravdepodobne opä prostredníctvom typu súboru, rozlíšeného <strong>na</strong> základejeho koncovky.Metódy definované triedou FileView sú <strong>na</strong>sledujúce:getDescription() – táto metóda musí vráti odkaz <strong>na</strong> inštanciu String, ktorá by malaobsahova textový opis súboru (konkrétneho súboru, nie typu),getIcon() – metóda vráti odkaz <strong>na</strong> inštanciu triedy Icon, ktorá predstavuje ikonu zobra−zenú pri súbore v zoz<strong>na</strong>me súborov,getName() – metóda vracia reazec obsahujúci názov súboru, za normálnych okolnostíf.getName(), kde f je inštancia triedy File zí<strong>sk</strong>aná ako parameter tejto funkcie,getTypeDescription() – vracia všeobecný opis typu súboru,isTraversable() – vracia logickú hodnotu true, pokia¾ súbor mono prechádza, v opaè−nom prípade vracia false. Implicitne by mala táto metóda vraca true pre súbory, ktorésú adresármi.Ukáeme si implementáciu jednoduchého poh¾adu <strong>na</strong> súbory, v ktorej preaíme me−tódy getName() a getIcon(). Preaením prvej metódy dosiahneme, aby sa mená súborovzobrazovali v tvare koncovka.meno, teda opaène, ne je to obyèajne. V metóde getIcon()zabezpeèíme, aby všetky súbory s koncovkou .doc mali <strong>na</strong>mi definovanú ikonu:class MyView extends FileView {public String getName(File f) {if (f.isDirectory()) return f.getName();String fileName = f.getName();int index = fileName.lastIndexOf(".");String extension = "";if (index < 0) index = fileName.length();else extension = fileName.substring(index + 1) + ".";return extension + fileName.substring(0, index);}public Icon getIcon(File f) {String fileName = f.getName();int index = fileName.lastIndexOf(".");String extension = "";if (index >= 0) extension = fileName.substring(index + 1);if (extension.toLowerCase().equals("doc")) return new ImageIcon("iko<strong>na</strong>.png");return super.getIcon(f);}}Do tela konštruktora FileChooserExample ešte vloíme tento riadok:this.jfc.setFileView(new MyView());Po <strong>sk</strong>ompilovaní a spustení programu môete vidie výsledok podobný tomu <strong>na</strong> ob−rázku 2.Poïme sa blišie oboznámi s triedou MyView. Prekrytá metóda getName() má zaúlohu vráti meno súboru, lepšie povedané, reazec, ktorým bude súbor reprezentova−ný v poh¾ade <strong>na</strong> zoz<strong>na</strong>m súborov. Bene je týmto reazcom meno súboru, ale predemonštráciu funkcio<strong>na</strong>lity vlastnej implementácie triedy poh¾adu sme sa rozhodli, esúbory budú zobrazované v tvare „koncovka.meno“. Toto však platí len pre súbory, vprípade adresárov vraciame hneï meno súboru. Pokia¾ nejde o adresár, zistíme, akú másúbor koncovku, a jednoducho vrátime reazec pozostávajúci z koncovky a zvyšnéhonázvu súboru. Nesmieme zabudnú ošetri prípady, keï súbor nemá koncovku (názovsúboru neobsahuje z<strong>na</strong>k „.“). V takom prípade musí by vrátené celé meno súboru.Metóda getIcon() jednoducho zistí, èi súbor má koncovku .doc, a ak áno, vráti inštan−ciu triedy ImageIcon obsahujúcu <strong>na</strong>mi definovanú ikonu. Táto ruti<strong>na</strong> by sa dala optimali−zova vytvorením po¾a koncoviek a k nim priradených inštancií ImageIcon, pretoe prejeden typ súborov môe by pouitá tá istá inštancia ImageIcon. Súèasné riešenie vytvorínovú inštanciu pre kadý súbor s koncovkou .doc, èo je zbytoèné.Celý zdrojový kód tohto príkladu si môete stiahnu aj z domov<strong>sk</strong>ej stránky PC REVUE(<strong>www</strong>.pcrevue.<strong>sk</strong>).APLIKÁCIE MDI. Záver tejto èasti bude venovaný struènému úvodu do problematikyaplikácií MDI.Vo všeobecnosti môeme aplikácie rozdeli <strong>na</strong> aplikácie SDI (Single−Document In−terface) a MDI (Multi−Document Interface). Aplikácie SDI patria medzi tie jednoduchšie,pretoe pracujú vdy iba s jedným súborom. V prípade, e chcete otvori iný súbor,musíte <strong>na</strong>jprv zatvori ten, s ktorým aplikácia aktuálne pracuje. Príkladom aplikácie SDIObr. 3je Notepad (Poznámkový blok), dodávaný s OS Windows. Aplikácie MDI sa líšia od apli−kácií SDI práve tým, e dokáu pracova s viacerými otvorenými súbormi <strong>na</strong>raz. Hlavnéokno väèšinou obsahuje menu a nejaké nástroje umiestnené <strong>na</strong> paneloch a slúi akokontajner pre interné okná, z ktorých kadé reprezentuje jeden otvorený súbor. V dneš−nej dobe väèši<strong>na</strong> moderných aplikácií smeruje k implementácii MDI. Najbenejším prí−kladom aplikácií MDI môu by rôzne editory, èi u textové procesory, tabu¾kové pro−cesory, alebo vývojár<strong>sk</strong>e prostredia. Hlavný kontajner (alebo hlavné okno) aplikáciemusí zabezpeèi obsluhu udalostí súvisiacich s vloenými internými ok<strong>na</strong>mi, èi u ide ozákladné operácie, ako otvorenie alebo zatvorenie súboru, prípadne aplikáciu rôznychnástrojov (vyh¾adávanie, <strong>na</strong>hradzovanie) v jednotlivých interných oknách. Takisto môezabezpeèova rôzne druhy interaktivity medzi internými ok<strong>na</strong>mi. Interné okná by všaknemali vedie niè o ostatných interných oknách, ani to, èi vôbec ïalšie interné oknáexistujú. Komunikácia by mala prebieha len medzi interným oknom a rodièov<strong>sk</strong>ýmoknom (kontajnerom).Aplikáciám MDI a ich implementácii v Jave (resp. kninici Swing) sa zaèneme venovav <strong>na</strong>sledujúcej èasti, take sa, dúfam, môete teši <strong>na</strong> ïalšiu zaujímavú tému. Dovtedydovidenia.Andrej ChuSun ONE Studio 5 SE – príklad aplikácie MDI2/<strong>2004</strong> PC REVUE 153

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

Saved successfully!

Ooh no, something went wrong!