Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z 78. JavaFX 8.0. Rudolf Pecinovský

Rozměr: px
Začít zobrazení ze stránky:

Download "Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z 78. JavaFX 8.0. Rudolf Pecinovský"

Transkript

1 Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z 78 JavaFX 8.0 Rudolf Pecinovský rudolf@pecinovsky.cz

2 Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z 78 Obsah 1. Seznámení s koncepcí 2. Základní stavební prvky 3. Oživujeme aplikaci 4. Přidáváme formátování 5. Další potřebné prvky

3 1. Seznámení s koncepcí Obsah 1.1 Historický úvod Abstract Window Toolkit AWT Swing Standard Widget Toolkit SWT JavaFX 1.2 Cíle 1.3 Oddělení práce grafiků a programátorů 1.4 Některá specifika knihovny/platformy JavaFX 1.5 Vlákna Paralelní procesy Kooperativní plánování Preemptivní plánování Procesy vlákna Přístup platformy JavaFX k vláknům Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z 78

4 Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z Historický úvod Java se rychle uchytila jako hlavní jazyk pro výuku v univerzitních začátečnických kurzech programování Její hlavní výhodou bylo, že byla multiplatformní a navíc zabalila do jednoho produktu několik klíčových funkcionalit, které do té doby nevyly běžné nebo byly řešené odděleně v samostatných knihovnách a jednoúčelových jazycích Velmi dobrou podporu objektového paradigmatu Automatickou správu paměti Integrovanou podporu práce s vlákny Integrovanou podporu serializace Poměrně efektivní nástroj na vytváření platformně nezávislého GUI Postupně se prosazovaly různé nástroje pro návrh GUI AWT Swing SWT JavaFX

5 1.1.1 Abstract Window Toolkit AWT Základní knihovna, která byla součástí verze 1.0 Rozhodnutí o začlenění GUI padlo měsíc před uvedením produktu Používá komponenty OS, nad nímž běží Výhoda: Rychlá a jednoduchá Nevýhoda: Problém největšího společného dělitele Může používat pouze komponenty, které jsou součástí všech OS Když některé OS začaly zavádět další druhy komponent, nabylo možno je začlenit Ve verzi 1.1 zavedla systém událostí, který se používá dodnes Pro nezávislost definice vzhledu na použitém OS zavedla správce rozvržení layout managers Správci se liší strategií uspořádání jednotlivých komponent kontejneru Ke kontejneru přiřadíme správce podle požadované strategie Správce pak po každé změně automaticky přeuspořádá komponenty Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z 78

6 Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z Swing Knihovna byla začleněna ve verzi 2.0 Používá systém událostí a správců rozvržení knihovny AWT Přidává některé nové správce rozvržení Od OS přebírá pouze modul pro vyhrazení oblasti na obrazovce, vlastní zobrazení obsahu okna již řeší po svém Výhody: Lze snadno přidávat nové komponenty (tabulky, stromy, ) Umí zavést průsvitná okna a okna libovolných tvarů Nevýhoda: Je výrazně pomalejší, i když u současných počítačů to již není tak patrné Lze dynamicky nastavovat koncepci vzhledu tzv. look and feel Je naprogramována čistě objektově, takže ji lze snadno rozšířit

7 Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z Standard Widget Toolkit SWT Knihovna SWT vznikla v IBM jako pokus o vytvoření knihovny s rychlostí knihovny AWT a tvárností knihovny Swing Inspirací byla starší knihovna napsaná v IBM v jazyku Smalltalk Nad touto knihovnou je postaveno vývojové prostředí Eclipse Knihovna nemá takové možnosti rozšíření jako Swing, takže nakonec musela být do Eclipse musel zařazeny nástroje umožňující efektivní vývoj programů nad knihovnou Swing

8 Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z JavaFX S nástupem nových poznatků, možností a technologií sílila potřeba výrazné přepracování knihovny Swing Firma Sun přišla s alternativním řešením jazykem JavaFX Script V roce 2007 byl zveřejněn jako open source Následně byla vytvořena knihovna Javy se stejnou funkcionalitou Od verze 8 je integrální součástí standardní knihovny, knihovna Swing již není dále vyvíjena, pouze se v ní opravují chyby Většina aplikací postupně přechází ze Swing na JavaFX, protože ta lépe podporuje poslední technologie a možnosti

9 Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z Cíle Knihovna je navržena tak, aby vyvinuté aplikace mohly běhat stejně dobře v různých prostředích: na desktopu, v appletu v nějakém zařízení (telefon, set-top box, ) Formátování lze definovat několika způsoby Klasicky programem Prostřednictvím XML souborů typu FXML Prostřednictvím souborů CSS Snaha používat především deklarativní styl programování: Říkat čeho chceme dosáhnout Nemuset říkat jak toho dosáhnout

10 Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z Oddělení práce grafiků a programátorů Na vývoji GUI se podílejí dvě skupiny vývojářů: Grafici a odborníci na UI, kteří navrhují obsah a rozvržení jednotlivých dialogových oken a dalších ovládacích prvků Programátoři, kteří mají na starosti funkčnost navrženého GUI Každá skupina má jiný přístup k návrhu a preferuje jiné nástroje V klasicky navržených knihovnách se špatně rozdělují zodpovědnosti za jednotlivé části návrhu JavaFX umožňuje, aby každá skupina navrhla svoji část do vlastních souborů, jejichž obsah druhá skupina nijak neovlivní Grafici navrhují uspořádání do souboru FXML a formát do souborů CSS Programátoři navrhují funkčnost ve zdrojových souborech použitého programovacího jazyka (Java, Groovy, Scala, )

11 Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z Některá specifika knihovny/platformy JavaFX Souřadnice i rozměry se zadávají jako čísla typu double Jakékoliv operace, které se mají vzápětí projevit na obrazovce, je třeba provádět z vlákna JavaFX Application Operace, které trvají delší dobu, je třeba provádět v jiném vlákně a vlákno JavaFX Application pověřovat pouze zobrazením výsledku

12 Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z Vlákna Dění v okolním světě probíhá paralelně Každý jedinec žije relativně nezávisle na ostatních Každá buňka v jedinci žije relativně nezávisle na ostatních Pro přežití spolu musí jednotliví jedinci/buňky komunikovat Je-li program simulací dějů ve světě, musí umět tuto skutečnost nějak modelovat Paralelismus se v programech často využívá: Vytížení počítače při čekání na externí časově náročné akce Čekání na uživatelský vstup Úlohy typu producent konzument (sdílení prostředků) Simulace

13 Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z Paralelní procesy Současné operační systémy dokáží dělat několik věcí najednou, a to i tehdy, mají-li k dispozici pouze jeden procesor Každá akce se spustí jako tzv. proces, kterému pak přidělován procesor Výhodou takto zorganizované práce je celkové urychlení Proces, který musí počkat na odezvu nějakého pomalejšího zařízení, může vrátit procesor, aby byl na dobu tohoto čekání přidělen jinému procesu Podpora paralelismu bývá začleněna i do instrukčního souboru mikroprocesorů Přidělováním procesorů je pověřen speciální program označovaný jako plánovač procesů (anglicky process scheduler) Dva přístupy k řízení paralelních procesů Kooperativní plánování Preemptivní plánování

14 Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z Kooperativní plánování Plánovač přidělí procesor vybranému procesu a ten se jej po nějaké době dobrovolně vzdá Lze provozovat na jakémkoliv procesoru Příliš závislé na správném naprogramování každý proces se musí v pravidelných intervalech dobrovolně vzdát procesoru Zablokování chodu jednoho procesu zastaví chod všech ostatních Příklad (pro pamětníky): Windows 3.11 Kooperativní plánování paralelních procesů používají některé levnější telefony

15 1.5.2 Preemptivní plánování Preempt: 1) předejít, zabránit; 2) získat předkupním právem; 3) přivlastnit si, uzurpovat Plánovač přidělí spuštěnému procesu procesor, takže daný proces může začít vykonávat požadovanou činnost Po nějaké době (řádově desítky až stovky milisekund) mu procesor opět odebere Přitom si musí zapamatovat důležité informace o aktuálním stavu přerušeného procesu, aby jej mohl posléze do tohoto stavu vrátit a přidělí procesor jinému procesu Nejprve jej ale uvede do stavu, ve kterém mu byl procesor odebrán Protože se toto přepínáním procesů děje velmi rychle, běžnému uživateli připadá, že všechny procesy běží současně. Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z 78

16 Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z Procesy vlákna Ukládání informací o stavu přerušovaného procesu vyžaduje nezanedbatelnou režii musí si pamatovat Stav procesoru, tj. obsah jednotlivých registrů Oblasti paměti, do nichž má přístup Potřeba zvýšení efektivity přepínání mezi procesy přimělo autory OS, aby jednotlivým procesům umožnily vytvářet jednodušeji koncipované podprocesy, které označujeme jako vlákna (thread) Vlákna na rozdíl od procesů sdílejí paměť Procesy (podprocesy, vlákna) sdílí řadu zdrojů, o které soupeří Sdílení zdrojů sníží režií při jejich přepínání Soupeření o zdroje zvyšuje pravděpodobnost, že při jejich získávání a uvolňování nastanou problémy Jedním ze zdrojů je i obrazovka a další periferie ovládané platformou JavaFX

17 1.5.4 Přístup platformy JavaFX k vláknům JavaFX řeší tuto problematiku obdobně jako naprostá většina současných platforem pro tvorbu GUI: reaguje pouze na požadavky přišedší z jejího vlákna Pro požadavky přímo ovlivňující dění na obrazovce (a dalších zařízeních) je vytvořeno vlákno JavaFX Application Thread Přišedší požadavky jsou řazeny do fronty a zpracovávány jeden po druhém Nepříjemný důsledek: dlouhotrvající operace zastaví GUI Řešení: JavaFX umožňuje spustit dlouhotrvající akci v jiném vláknu a požadavek na překreslení zařadit do fronty, až bude akce hotova Nepříjemný vedlejší efekt: Studenti občas tento mechanizmus omylem spustí a pak je překvapí zdánlivě podivuhodné chování programu Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z 78

18 2. Základní stavební prvky Obsah 2.1 Aplikace javafx.application.application Spuštění aplikace bez metody main(string[]) Spuštění a ukončení s metodou main(string[]) Alternativní spuštění Ukončení aplikace 2.2 Třída javafx.application.platform 2.3 Standardní životní cyklus aplikace Poznámky k životnímu cyklu Demo: C00_EmptyApplicatioon 2.4 Jeviště javafx.stage.stage Nejpoužívanější metody jeviště Metody ovlivňující pozici okna Metody ovlivňující velikost okna Metody ovlivňující viditelnost okna Superjednoduchá aplikace s jevištěm 2.5 Scéna javafx.scene.scene Konstruktory scény Nejpoužívanější metody scény 2.6 Grafické prvky (uzly) javafx.scene.node Základní spouštěcí třídy Demonstrační aplikace s pasivním tlačítkem Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z 78

19 2.1 Aplikace javafx.application.application Hlavním objektem celého GUI je instance třídy, která musí být potomkem třídy javafx.application.application Ta při spuštění: Zjistí základní vlastnosti prostředí, pod nímž běží (většinou operační systém či prohlížeč) Velikost oblasti, kterou má k dispozici pro zobrazení Barevnou hloubku (jak předávat informace o zobrazovaných barvách) Odkaz na pomocné knihovny (DirectX, OpenGL, ) Další potřebné informace Získá od prostředí objekt pro budoucí primární okno Propojí tento objekt s tzv. jevištěm (objekt typu javafx.stage.stage) Vytvoří vlákni událostí JavaFX Application Thread Zavolá metodu start(stage) zodpovědnou za inicializaci GUI a předá ji primární jeviště Potomek musí mít veřejný bezparametrický konstruktor a musí přebít abstraktní metodu start(stage) Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z 78

20 Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z Spuštění aplikace bez metody main(string[]) Aplikace v JavaFX teoreticky nepotřebuje metodu main(string[]) Jako hlavní třídu aplikace je možno definovat i třídu, která je potomkem třídy javafx.application.application Při práci v NetBeans: má-li být třída považována za hlavní třídu aplikace i bez main(string[]), je potřeba pro daný projekt nastavit Properties Deployment Switch Project to JavaFXDeployment Model a zadat pak příslušnou třídu jako hlavní Toto nastavení však není možno jednoduše vrátit Příslušná nastavení se musí vrátit zpět ručně opravou příslušných konfiguračních souborů Doporučuji proto dát přednost klasické cestě používající hlavní třídu s metodou main(string[])

21 Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z Spuštění a ukončení s metodou main(string[]) Platforma se spouští zavoláním statické metody třídy Application se signaturou: public static void launch(class<? extends Application> appclass, String... args) Voláme-li tuto metodu z potomka třídy Application, můžeme volat zjednodušenou verzi se signaturou public static void launch(string... args) Tato metoda si zjistí třídu, jejíž metoda ji volá, a zavolá předchozí verzi, které předá class-objekt volající třídy jako parametr

22 Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z Alternativní spuštění Vlákno JavaFX je možno spustit i pouhým vytvořením instance některé vhodné třídy Jedna z možností: new JFXPanel(); Jeviště si pak aplikace vytvoří zavoláním příslušného konstruktoru

23 2.1.4 Ukončení aplikace Ukončení aplikace nezávisí na způsobu spuštění Aplikaci můžeme ukončit: Automaticky po zavření posledního okna Pokus se žádné okno neotevře, nemůže se ani zavřít, a proto po ukončení metody start(stage) aplikace stále běží Ručně zavoláním metody javafx.application.platform.exit() Možnost automatického ukončení je možno zakázat zavoláním javafx.application.platform.setimplicitexit(false) Naopak zavoláním javafx.application.platform.setimplicitexit(true) můžeme automatické ukončování opět povolit Implicitně je automatické ukončování povoleno (na rozdíl od zvyklostí v platformě swing) Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z 78

24 Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z Třída javafx.application.platform Knihovní třída řešící záležitosti platformy JavaFX Důležité metody void exit() Ukončí aplikaci boolean isimplicitexit() void setimplicitexit(boolean implicitexit) Zjistí, resp. nastaví, zda se po zavření posledního okna aplikace ukončí boolean isfxapplicationthread() Prozradí, zda volající kód běží ve vlákně JavaFX Application Thread void runlater(runnable runnable) Spustí metodu run() zadaného objektu ve vlákně JavaFX Application Thread

25 Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z Standardní životní cyklus aplikace 1. Spouštěcí metoda launch(?) zjistí, jestli už byla volána, a pokud ano, vyhodí výjimku IllegalStateException která ohlásí: Application launch must not be called more than once 2. Inicializuje platformu a vytvoří a spustí vlákna JavaFX Launcher pro přípravu a posléze i ukončení celé platformy JavaFX Application, v němž se budou provádět operace ovlivňující podobu GUI 3. Vytvoří se instance spouštěného GUI (potomka Application) 4. Ve vláknu JavaFX Launcher se provede metoda init() zodpovědná za inicializaci objektů nesouvisejících přímo s GUI 5. Ve vláknu JavaFX Application se provede metoda start(stage) zodpovědná za realizaci a běh vlastního GUI nyní aplikace běží 6. Po ukončení se ve vláknu JavaFX Application provede metoda stop() zodpovědná za úklid prostředků, které nezvládla uklidit metoda start(stage) 7. Ukončí se celá aplikace

26 Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z Poznámky k životnímu cyklu Nejsou-li definovány metody init() a/nebo stop() použijí se zděděné verze, které jsou prázdné Aplikace běží, dokud se neukončí metoda launch(?), která však čeká na ukončení metody start(stage) Může se proto stát, že spustíme druhou aplikaci, když ještě stále (byť neviditelně) běží ta první Nebezpečí je však menší než při použití knihovny Swing, protože implicitně stačí zavřít všechna okna a není třeba myslet na nutnost explicitního nastavení ukončení Metoda stop() se spustí nezávisle na tom, jedná-li se o řádné či mimořádné ukončení

27 Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z Demo: C00_EmptyApplicatioon public class C00_EmptyApplicatioon extends Application public void init() { System.out.println("\nMetoda init() spuštěna\n"); public void start(stage primarystage) { System.out.println("\nMetoda start spuštěna\n" + "a ukončena\n"); // Platform.exit(); //Ukončí se i bez explicitního volání exit() public void stop() { System.out.println("\nMetoda stop() spuštěna\n"); } } public static void main(string[] args) { launch(args); }

28 2.4 Jeviště javafx.stage.stage Viditelnou část aplikace zobrazuje jeviště instance třídy javafx.stage.stage U desktopových aplikací je jevištěm aplikační okno, včetně případné titulkové lišty a dalších zdobení Aplikační okno může být i celoobrazovkové bez zdobení U appletů běžících v rámci nějaké webové stránky je jevištěm příslušná obdélníková oblast dané stránky U maloobrazovkových zařízení bez multiokenního operačního systému bývá jevištěm celá obrazovka Jeviště nemusí být jediné Primární jeviště konstruuje platforma při startu aplikace Program může během svého života vytvářet další jeviště a nepotřebná jeviště opět rušit Aby mělo jeviště co zobrazovat, musí se mu nastavit scéna O scéně pojednává subkapitola 1.6 Scéna javafx.scene.scene na straně 34 Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z 78

29 Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z Nejpoužívanější metody jeviště String gettitle() void settitle(string value) Vrátí, resp. nastaví titulek okna daného jeviště Scene getscene() void setscene(scene value) Vrátí, resp. nastaví scénu zobrazovanou na daném jevišti void show() Zobrazí okno daného jeviště void showandwait() Zobrazí okno daného jeviště a počká, až je uživatel zavře void close() void hide() Zavře, resp. skryje okno daného jeviště Tyto metody jsou si ekvivalentní boolean isshowing() Vrátí, zda je dané okno zobrazováno (neříká, jestli je vidět!)

30 Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z Metody ovlivňující pozici okna public void centeronscreen() Vystředí okno na obrazovce double getx() double gety() Vrátí vodorovnou, resp. svislou pozici okna na obrazovce void setx(double value) void sety(double value) Nastaví vodorovnou, resp. svislou pozici okna na obrazovce Pro umístění na jiné obrazovce je možno používat i záporné souřadnice

31 Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z Metody ovlivňující velikost okna public void sizetoscene() Nastaví velikost okna podle velikosti zobrazované scény double getwidth() void setwidth (double value) double getheight() void setheight(double value) Vrátí, resp. nastaví, šířku, resp. výšku okna daného jeviště boolean isresizable() void setresizable(boolean value) Vrátí, resp. nastaví, zda může uživatel měnit velikost okna boolean isfullscreen() void setfullscreen(boolean value) Vrátí, resp. nastaví, zda má být okno roztažené přes celou obrazovku boolean ismaximized() void setmaximized(boolean value) Vrátí, resp. nastaví, zda má být okno maximalizováno boolean isiconified() void seticonified(boolean value) Vrátí, resp. nastaví, zda má být okno minimalizováno

32 Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z Metody ovlivňující viditelnost okna boolean isalwaysontop() void setalwaysontop(boolean value) Vrátí, resp. nastaví, zda má být okno daného jeviště vždy navrchu void toback() Přesune okna daného jeviště za ostatní okna void tofront() Přesune okna daného jeviště před ostatní okna double getopacity() void setopacity(double value) Vrátí, resp. nastaví průhlednost daného okna

33 Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z Superjednoduchá aplikace s jevištěm public class C01_EmptyStage extends Application public void init() { JOptionPane.showMessageDialog(null, "Metoda init() spuštěna"); } public void start(stage primarystage) throws Exception { primarystage.settitle("prázdné jeviště bez scény"); primarystage.setx(-1250); primarystage.show(); public void stop() { JOptionPane.showMessageDialog(null, "Metoda stop() spuštěna"); } public static void main(string[] args) { launch(args); }

34 Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z Scéna javafx.scene.scene Scéna (instance třídy javafx.scene.scene) je základním kontejnerem zobrazovaných grafických prvků Opakování: Kontejner je objekt určený k ukládání jiných objektů Scéna smí obsahovat pouze jediný grafický prvek, kterým je kontejner typu javafx.scene.parent Grafické prvky jsou instancemi některého z potomků abstraktní třídy javafx.scene.node Prvky jsou uspořádány do stromu, jehož kořenem je kontejner, který se zadává konstruktoru scény jako parametr Během života scény je možno tento kořen měnit

35 Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z Konstruktory scény Scene(Parent root) Scene(Parent root, Paint fill) Scene(Parent root, double width, double height) Scene(Parent root, double width, double height, Paint fill) Scene(Parent root, double width, double height, boolean depthbuffer) Parametr depthbuffer má smysl pouze při zobrazování 3D grafiky Scene(Parent root, double width, double height, boolean depthbuffer, SceneAntialiasing antialiasing)

36 Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z Nejpoužívanější metody scény Parent getroot() void setroot(parent value) Vrátí, resp. nastaví kořenový prvek strom grafických prvků double getx() double gety() Vrátí vodorovnou, resp. svislou souřadnici scény v okně void setx(double value) void sety(double value) Nastaví vodorovnou, resp. svislou souřadnici scény v okně double getwidth() double getheight() Vrátí šířku, resp. výšku okna dané scény Parent getroot() void setroot(parent value) Vrátí, resp. nastaví kořenový kontejner stromu grafických prvků

37 Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z Grafické prvky (uzly) javafx.scene.node Scéna obsahuje grafické prvky, které jsou instancemi abstraktní třídy javafx.scene.node Speciálním druhem prvků jsou kontejnery; ty jsou instancemi třídy javafx.scene.parent nebo jejích potomků Třída Node má přes 300 vlastních metod, které začneme probírat vždy, až to bude vhodné Některé prvky jsou současně ovládací prvky a současně kontejnery; mezi takové patří např. tlačítko

38 Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z Základní spouštěcí třídy javafx.application <<library>> Platform <<abstract>> Application MyApplication + start(primarystage : Stage) : void javafx.stage Window Stage + setscene(scene : Scene) : void + setscene(scene : Scene) : void javafx.scene <<abstract>> Node Parent + getchildren() : ObservableList<Node> Scene javafx.bean javafx.collections java.util <<interface>> Ovservable <<interface>> ObservableList<Node> <<interface>> List<Node>

39 2.6.2 Demonstrační aplikace s pasivním tlačítkem public class C02_h extends C01_EmptyStage public void start(stage primarystage) { primarystage.setx(x0); primarystage.settitle("jeviště se scénou s pasivním tlačítkem"); Button button = new Button("Já jsem tlačítko"); Scene scene = new Scene(button); } primarystage.setscene(scene); primarystage.show(); } public static void main(string[] args) { launch(args); } Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z 78

40 3. Oživujeme aplikaci Obsah 3.1 Událostí a jejich ošetření 3.2 Návrhový vzor Pozorovatel Princip práce Diagram tříd vzoru Pozorovatel Aplikované principy a možné implementace 3.3 Události a reakce na ně Ovladače událostí EventHandler Reakce tlačítka na stisk Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z 78

41 Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z Událostí a jejich ošetření Dřívější programy sledovaly vstup z klávesnice, a když uživatel něco zadal, tak na zadaný příkaz zareagovaly Problém je v tom, že požadavky lze zadávat mnoha různými způsoby a program pak musí sledovat několik zařízení současně Program, který vše sleduje, není triviální, a proto byl koncept čekání na požadavky a jejich zpracování změněn Současné programy nečekají na vstup aktivně, ale přenechají prvotní zpracování vstupu operačnímu systému Operační systém hlídá všechny možné vstupy, a nastane-li situace, na níž by uživatel mohl chtít zareagovat, vyrobí objekt specifikující vzniklou událost a oznámí vznik dané události všem, kteří se přihlásili jako čekatelé Celé řešení je postaveno na doporučeních návrhového vzoru Pozorovatel Posluchač Vydavatel-Předplatitel (Observer Listener Publisher-Subscriber)

42 Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z Návrhový vzor Pozorovatel Pro tento návrhový vzor se používá více názvů Pozorovatel (Observer) Posluchač (Listener) Vydavatel Předplatitel (Publisher Subscriber) Princip Objekt čekající na výskyt nějaké události má dvě možnosti: Neustále se ptát iniciátora události, zda už nastala Oslík v 2. dílu Shreka se neustále ptá Už tam budem? Řidič čekající na zelenou neustále sleduje semafor Dohodne se s iniciátorem, že dohodnutým způsobem oznámí, až událost nastane V lůžkovém vlaku vás průvodčí vzbudí před cílovou stanicí Řidič na semaforu v klidu čte mapu v očekávání, že ti za ním na něj zatroubí SMS oznámí příchod peněz na konto Návrhový vzor Pozorovatel řeší problém druhým způsobem, je však třeba dohodnout způsob oznámení výskytu události

43 Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z Princip práce Pozorovatel (posluchač/předplatitel) se přihlásí u pozorovaného (poslouchaného, vydavatele) objektu, a ten mu při vzniku očekávané události pošle o této události zprávu Pozorovaný (vysílač, vydavatel) je ochoten přijmout přihlášku pouze od objektů, jejichž mateřské třídy implementují interfejs definující jak objektu oznámit, že došlo k očekávané události Pozorovatel (posluchač/předplatitel) se po přihlášení o událost dál nestará a hledí si svého Zareaguje až v okamžiku, kdy pozorovaný (vysílač, vydavatel) pošle dohodnutou zprávu (zavolá příslušnou metodu) Takto koncipovaný program bývá označován jako program řízený událostmi (event driven program) Na této koncepci jsou postavena veškerá GUI

44 Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z Diagram tříd vzoru Pozorovatel Prostředník <<interface>> Komunikující T1 T2 T3 T4 T5

45 3.2.3 Aplikované principy a možné implementace Hollywoodský princip: Nevolejte nám, zavoláme vám Někdy se v této souvislosti hovoří o principu inverze závislostí (dependency inversion) Aby pozorovaný (vysílač, vydavatel) nezávisel na oslovovaných objektech, tak je donutí implementovat jím deklarovaný interfejs a baví se s nimi jako s instancemi tohoto interfejsu Při této koncepci se musejí oslovované objekty naopak přizpůsobit oslovujícímu Můžeme použít tažnou nebo tlačnou strategii: Při tažné strategii si pozorovatel říká pozorovanému objektu o potřebné parametry, Při tlačné strategii předá pozorovaný objekt pozorovateli všechny parametry při volání upozorňovací metody Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z 78

46 3.3 Události a reakce na ně Společný rodič všech tříd událostí na platformě Java je třída java.util.eventobject public Object getsource() Metoda vrací zdroj nastalé události většinou pozorovaný objekt (vysílač / vydavatele) Na platformě JavaFX jsou události instancemi jeho potomka javafx.event.event EventTarget gettarget() Metoda vrací cíl události, který specifikuje, kudy bude událost po svém odeslání probíhat static void fireevent(eventtarget eventtarget, Event event) Vyvolá zadanou událost se zadaným cílem Cílem může být libovolný objekt, jenž na ni umí zareagovat EventType<? extends Event> geteventtype() Vrátí typ dané události; na platformě JavaFX tvoří typy událostí stromovou strukturu Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z 78

47 Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z Ovladače událostí EventHandler Na vznik události reagují ovladače událostí, které jsou instancemi interfejsu javafx.event.eventhandler<t extends Event> Typ ovladač události je prostřednictvím svého typového parametru přímo napojen na typ události void handle(t event) Metoda definující reakci na vzniklou událost Ovladače se velmi často zadávají prostřednictvím lambda-výrazů, které tuto metodu definují

48 Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z Reakce tlačítka na stisk Jednou z možných událostí, na které může reagovat tlačítko, je stisk daného tlačítka Reakci tlačítka na stisk zadáme zavoláním metody void setonaction(eventhandler<actionevent> value) Doplníme do metody na stráně 39 nadepsané Demonstrační aplikace s pasivním tlačítkem kód: final boolean[] even = { false }; //Je-li sudý button.setonaction(event -> { double xx = primarystage.getx(); xx += even[0]? +100 : -100; even[0] =! even[0]; primarystage.setx(xx); } );

49 4. Přidáváme formátování Obsah 4.1 Kontejnery Hierarchie kontejnerů 4.2 Uspořádání zobrazovaných objektů Základní uspořádání pro BorderPane 4.3 Jednoduché GUI naší adventury GameGUI_ Metoda start(stage primarystage) 1/ Metoda start(stage primarystage) 2/ Metoda ontextfieldevent(actionevent event) 1/ Metoda ontextfieldevent(actionevent event) 2/2 4.4 Ovládací prvky 4.5 Nabídka Položka typu javafx.scene.control.checkmenuite m Položka typu javafx.scene.control.radiomenuite m Ukázka programu třída MenuPane Ukázka programu metoda gamemenu() Ukázka programu metoda changegamefor() Ukázka programu metoda optionsmenu() Ukázka programu metoda helpmenu() Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z 78

50 Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z Kontejnery Každý uzel kromě kořenového má svého rodiče, který musí být instancí typu javafx.scene.parent nebo jeho potomka Kontejner má své prvky uložené v seznamu typu javafx.collections.observablelist<javafx.scene.node> ObservableList<E> definuje pro přidání, resp. odebrání prvků metody boolean addall(e... elements) boolean removeall(e... elements) přičemž návratová hodnota odpovídá kontraktu interfejsu Collection Jak z názvu vyplývá, seznam je pozorovatelný, takže se u něj můžeme přihlásit jako jeho pozorovatelé kterým je nahlášena každá změna jeho obsahu To v požadovaném GUI nebudeme potřebovat

51 Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z Hierarchie kontejnerů javafx.scene.node javafx.scene.parent //Abstraktní třída javafx.scene.group //Každý prvek si musí objednat pozici //Přizpůsobuje svoji velikost velikosti obsahu javafx.scene.web.webview //Obsahuje HTML objekt typu WebEngine javafx.scene.layout.region //Společný rodič panelů javafx.scene.chart.axis<t> //Panel pro osy grafů a jejich příslušenství javafx.scene.chart.chart //Panel pro obsah grafu javafx.scene.layout.pane //Společný rodič panelů s rozvržením javafx.scene.layout.anchorpane //Umožňuje děti ukotvit k okrajům javafx.scene.layout.borderpane //Pět fixních částí javafx.scene.layout.flowpane //Umísťuje děti jako když píše javafx.scene.layout.gridpane //Rozmisťuje děti do chytré tabulky javafx.scene.layout.hbox //Ukládá děti vodorovně vedle sebe javafx.scene.layout.stackpane //Zobrazuje děti na sobě javafx.scene.layout.tilepane //Rozmisťuje děti do jednoduché tabulky javafx.scene.layout.vbox //Ukládá děti svisle pod sebe javafx.scene.control.control //

52 4.2 Uspořádání zobrazovaných objektů Některé kontejnery řídí uspořádání svých prvků, v jiných si jednotlivé prvky musejí objednat své umístění Pro aplikační okno se většinou používá kontejner typu BorderPane, který Rozděluje svěřenou oblast do 5 částí: Top, Bottom, Left, Right, Center Do každé části je ochoten přijmout jeden prvek, ne víc Potřebujeme-li do některé části dát víc prvků, použijeme kontejner BorderPane přizpůsobí některé rozměry svých částí rozměrům jejich prvků Sekce Top a Bottom přizpůsobí svoji výšku výšce obsaženého prvku Sekce Left a Right přizpůsobí svoji šířku šířce obsaženého prvku Sekce Center roztáhne prvek přes zbylou oblast Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z 78

53 Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z Základní uspořádání pro public void start(stage primarystage) { primarystage.setx(x0); primarystage.settitle("aplikační okno typu BorderPane"); BorderPane rootpane = new BorderPane(new Button("Center"), new Button("Top"), new Button("Right"), new Button("Bottom"), new Button("Left")); Scene scene = new Scene(rootPane); } primarystage.setscene(scene); primarystage.show();

54 4.3 Ovládací prvky Standardní součástí GUI jsou nejrůznější ovládací prvky, prostřednictvím nichž ovládáme aplikaci Většina je v balíčku javafx.scene.control V GUI své adventury budete používat prvky Button Tlačítko (Prozatím na něm byl text, ale lze na něj umístit i ikonu) TextArea Výstupní textové oblast (může být i vstupní, ale to jsme pro naši hru zakázali) TextField Vstupní testové pole Label Reprezentuje text umisťovaný do kontejneru, většinou popisek ovládacího prvku Menu, MenuBar, MenuItem, CheckMenuItem, SeparatorMenuItem Typy prvků souvisejících s nabídkou bude jim věnována samostatná pasáž Ovládací prvek může mít přiřazenu vlastní nápovědu a místní nabídku Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z 78

55 4.4 Jednoduché GUI naší adventury GameGUI_0 Pro začátek vyzkoušíme aplikační okno, jehož scénu bude tvořit kontejner typu BorderPane který bude obsahovat: V centrální zóně textové pole typu TextArea pro odpovědi hry Přesně: javafx.scene.control.textarea Ve spodní zóně vstupní pole typu TextField pro zadávání příkazů hráče Přesně: javafx.scene.control.textfield Vstupní pole vyvolá po stisku klávesy ENTER při zadávání textu událost javafx.event.actionevent => musíme u něj přihlásit posluchače typu javafx.event.eventhandler<actionevent> Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z 78

56 Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z Metoda start(stage primarystage) public void start(stage primarystage) { primarystage.settitle("superjednoduché GUI hry"); primarystage.setx(x0); primarystage.sety(y0); //Musíme pro ně vytvořit proměnné, protože je budeme oslovovat textarea = new TextArea(); textfield = new TextField(); //Definujeme uspořádání aplikačního okna BorderPane borderpane = new BorderPane(); borderpane.setcenter(textarea); borderpane.setbottom(textfield); //Vytvořím scénu a zobrazím jeviště aplikační okno hry Scene scene = new Scene(borderPane, 640, 480); primarystage.setscene(scene); primarystage.show();

57 Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z Metoda start(stage primarystage) 2/2 //Je třeba zabezpečit, aby uživatel nemohl ani omylem //psát do výstupního pole textarea.seteditable(false); //U vstupního pole je třeba zaregistrovat ovladač, //který bude pověřen zpracováním příkazů textfield.setonaction(textfieldeventhandler); //Zadání startovacího příkazu textfield.settext(""); } //Vlastní spuštění hry zavolám metodu pro ošetření události //přičemž jako parametr vytvořím novou, prázdnou událost //(mohl bych zadast i prázdný odkaz, protože metoda parametr nepoužívá, //ale to už bych dělal kód závislý na konkrétní implementaci) textfieldeventhandler.handle(new ActionEvent());

58 Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z Metoda ontextfieldevent(actionevent event)1/2 /*************************************************************************** * Definuje reakci na zadání hodnoty do vstupního textového pole. * event Událost, na níž se má reagovat - nepoužívá se */ private void ontextfieldevent(actionevent event) { String command; //Zadávaný příkaz String answer; //Odpověď hry //Převezme se uživatelův příkaz command = textfield.gettext(); //Příkaz se zadá hře a od hry se převezme její odpověď answer = game.executecommand(command); answer = decorate(answer, game); //Doplnění informace o stavu hry

59 Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z Metoda ontextfieldevent(actionevent event)2/2 //Vyčistíme vstupní pole pro zadání dalšího příkazu textfield.settext(""); //Vypíšeme do výstupního pole příkaz a za ním odpověď hry textarea.appendtext(command + "\n \n" + answer + "\n===========================\n\n"); } //Pokud hra skončila, zpasivníme vstupní pole if (! game.isalive()) { textfield.setonaction(null); }

60 4.5 Nabídka Základní nabídka je umisťována na nabídkovou lištu instanci třídy javafx.scene.control.menubar Většinou se umisťuje do horního pole panelu typu BorderPane V každém jevišti může být jedna nabídka nastavena jako systémová; pak se bude chovat podle pravidel aktuální platformy Nabídková lišta je kontejner, jehož dětmi jsou jednotlivé nabídky instance třídy javafx.scene.control.menu Nabídky jsou opět kontejnery, jejichž dětmi jsou instance typy javafx.scene.control.menuitem Nabídka je sama potomkem MenuItem, takže může být svoji vlastní položkou podnabídkou Základní funkcionalitou instancí třídy MenuItem je (stejně jako u tlačítek) vyvolání události ActionItem její ovladače se nastavují stejně Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z 78

61 Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z Položka typu javafx.scene.control.checkmenuitem Položka typu CheckMenuItem je schopen přepínat svůj stav a zobrazovat jej jako zaškrtnutí Ve hře se hodí pro zobrazení stavu zobrazování mapy nebo žurnálu boolean isselected() Vrátí informaci o tom, je-li položka nastavená (zaškrtnutá) void setselected(boolean value) Nastaví zaškrtnutost dané položky

62 4.5.2 Položka typu javafx.scene.control.radiomenuitem Položka typu RadioMenuItem představuje jeden stav vícestavového přepínače void settogglegroup(togglegroup value) Přiřadí položce skupinu položek tvořících dohromady přepínač Skupinu je ale nejprve třeba vytvořit voláním konstruktoru ToggleGroup() ToggleGroup gettogglegroup() Vrátí skupinu položek přepínače, do níž daná položka patří boolean isselected() Vrátí informaci, je-li položka nastavená (definuje stav přepínače) void setselected(boolean value) Nastaví přepínač na danou položku Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z 78

63 Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z Ukázka programu třída MenuPane public class MenuPane extends MenuBar { //== CONSTUCTORS AND FACTORY METHODS =========================================== /*************************************************************************** * Soukromý konstruktor zabezečuje vytvoření jediné instance. */ private MenuPane() { getmenus().add(gamemenu()); getmenus().add(optionsmenu()); getmenus().add(helpmenu()); }

64 Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z Ukázka programu metoda gamemenu() private Menu gamemenu() { String menuname; MenuItem mygame = new MenuItem(menuName = "Moje hra"); mygame.setonaction(changegamefor(my_game, menuname)); MenuItem demogame = new MenuItem(menuName = "Demonstrační hra"); demogame.setonaction(changegamefor(demo_game, menuname)); MenuItem restartgame = new MenuItem(menuName = "Restart aktuální hry"); restartgame.setonaction(changegamefor(demofxgui.getinstance()::getgame, menuname)); MenuItem separator = new SeparatorMenuItem(); MenuItem exit = new MenuItem(menuName = "Ukončení aplikace"); exit.setonaction(p -> Platform.exit()); } Menu gamemenu = new Menu("Hra"); gamemenu.getitems().addall(mygame, demogame, restartgame, separator, exit); return gamemenu;

65 Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z Ukázka programu metoda changegamefor() private EventHandler<ActionEvent> changegamefor( Supplier<IGameG> gamefactory, String menuname) { EventHandler<ActionEvent> handler = (e) -> { IGameG nextgame = gamefactory.get(); OutputPane.getInstance().appendText( "\n\n======================================" + "\nakce: " + menuname + "\npřepínám na: " + nextgame.getclass() + "\n======================================" + "\n\n"); nextgame.stop(); DemoFXGUI.getInstance().startGame(gameFactory.get()); }; return handler; }

66 Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z Ukázka programu metoda optionsmenu() private Menu optionsmenu() { CheckMenuItem showmap = new CheckMenuItem("Zobrazovat plánek"); showmap.setonaction((actionevent ae) -> { boolean selected = showmap.selectedproperty().get(); mapwindow.show(selected); }); mapwindow.setonshown (e->showmap.setselected(true )); mapwindow.setoncloserequest(e->showmap.setselected(false)); Menu optionsmenu = new Menu("Nastavení"); optionsmenu.getitems().addall(showmap); } return optionsmenu;

67 Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z Ukázka programu metoda helpmenu() private Menu helpmenu() { MenuItem aboutitem = new MenuItem("Informace o aplikaci"); aboutitem.setonaction(this::showaboutwindow); MenuItem helpitem = new MenuItem("Popis hry a instrukce"); helpitem.setonaction(this::showhelpwindow); Menu helpmenu = new Menu("Nápověda"); helpmenu.getitems().addall(aboutitem, helpitem); } return helpmenu;

68 5. Další potřebné prvky Obsah 5.1 Zobrazení HTML nápovědy Ukázka kódu pro načtení nápovědy 5.2 Obrázky v programu 5.3 Získání obrázku Ukázka kódu: konstruktor MapWindow Ukázka kódu: konstruktor MapWindow 5.4 Provázání vlastností Ukázka: propojení pozice okna Ukázka: reakce na událost Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z 78

69 5.1 Zobrazení HTML nápovědy Zobrazování HTML souborů zprostředkovává kontejner typu javafx.scene.web.webview Tento kontejner ovládá procesor (nebo chcete-li parser) typu javafx.scene.web.webengine, který je zodpovědný za zpracování HTML obsahu Načte HTML stránku zavoláním metody void load(string url) Vytvoří její dokumentový model V případě potřeby aplikuje styly Je schopen zpracovat skripty v jazyku JavaScript Procesor získáme od WebView zavoláním metody WebEngine getengine() Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z 78

70 Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z Ukázka kódu pro načtení nápovědy private void showhelpwindow(actionevent event) { System.out.println("Zkoušíme připravit okno nápovědy"); URL helpurl = GUI.getGame().getHelpURL(); WebView webview = new WebView(); WebEngine engine = webview.getengine(); engine.load(helpurl.tostring()); Scene scene = new Scene(webView); Stage stage = new Stage(); stage.setscene(scene); } Stage primarystage = GUI.getPrimaryStage(); stage.setwidth (480); stage.setheight(300); stage.setx(primarystage.getx() + primarystage.getwidth()); stage.sety(primarystage.gety()); stage.show();

71 5.2 Obrázky v programu Obrázky jsou instancemi třídy javafx.scene.image.image JavaFX umí pracovat s obrázky ve formátech BMP, GIF, JPEG, PNG Pro obrázky vzniklé sejmutím obrazovky bývá nejlepší formát PNG Pro obrázky vzniklé jako fotografie bývá výhodnější formát JPG, resp. JPEG Pro získání obrázku je v našem případě nejvýhodnější použít konstruktor javafx.scene.image.image(inputstream is) Prvky scény s obrázky jsou instancemi třídy javafx.scene.image.imageview Objekt typu ImageView je v našem případě nejvýhodnější vytvořit zavoláním konstruktoru ImageView(Image image) Chceme-li v jenom prvku typu ImageView vyměňovat obrázky, použijeme metodu void setimage(image value) Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z 78

72 Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z Získání obrázku Soubory s obrázky objektů je nejlépe nazvat stejně jako jimi reprezentované objekty pak se dá z názvu zobrazovaného objektu odvodit název souboru s jeho obrázkem Pro obrázky je nejlépe vyhradit samostatnou složku, do níž vedle obrázků zařadíme i třídu definovanou např. public class Data {} Obrázek objektu s názvem v proměnné name pak získáme zadáním příkazu Image image = new Image(Data.class.getResourceAsStream(name)); Tlačítko, na němž je zobrazen příslušný objekt, pak získáme zadáním příkazu Button button = new Button("", new ImageView(image));

73 Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z Ukázka kódu: konstruktor MapWindow /*************************************************************************** * Vytvoří prázdné okno, v němž se bude po spuštění hry zobrazovat * plánek dané hry spolu s hráčem umístěným v aktuálním prostoru. */ private MapWindow() { super(); //Rodičem je jeváiště - StageStyle.UNDECORATED); pane = new Pane(); Scene scene = new Scene(pane); setscene(scene); }

74 Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z Ukázka kódu: konstruktor MapWindow /*************************************************************************** * Inicializuje se pro zadanou (nově spuštěnou) hru * načte obrázky jejího plánku a hráce a vloží je do přeipraveného okna. * game Nově spouštěná hra public void initializeforgame(igameg game) { this.game = game; this.map = game.getmap(); this.player = game.getplayer(); moveplayer(); ObservableList<Node> children = pane.getchildren(); children.clear(); children.addall(map, player); } show();

75 Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z Provázání vlastností Značná část objektů platformy JavaFX je vybavena řadou sledovatelných vlastností K vlastnosti se mohu přihlásit jako její pozorovatel a pak reagovat na všechny její změny

76 Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z Ukázka: propojení pozice okna /*************************************************************************** * Přilepit okno s plánkem zprava k zadanému oknu. * conectetstage Okno, k němuž se budeme lepit */ void stayon(stage conectetstage) { positionlistener(null, null, null); conectetstage. xproperty().addlistener(this::positionlistener); conectetstage. yproperty().addlistener(this::positionlistener); conectetstage. widthproperty().addlistener(this::positionlistener); // primarystage.heightproperty().addlistener(this::positionlistener); }

77 Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z Ukázka: reakce na událost /*************************************************************************** * Přizpůsobuje svoji pozici velikosti a pozici hlavního okna. * Parametry nejsou používané. * observable Pozorovaná hodnota oldvalue Stará hodnota newvalue Nově nastavená hodnoty */ private void positionlistener(observablevalue<? extends Number> observable, Number oldvalue, Number newvalue) { //Jak lze vypozorovat, metoda své parametry nevyužívá Stage primarystage = GUI.getPrimaryStage(); setx(primarystage.getx() + primarystage.getwidth()); sety(primarystage.gety()); }

78 5.5 KONEC Copyright Rudolf Pecinovský, Soubor: PR_JavaFX_8.0_ _ z 78

Při studiu tohoto bloku se předpokládá, že student je zvládá základy programování v jazyce Java s využitím vývojového prostředí NetBeans.

Při studiu tohoto bloku se předpokládá, že student je zvládá základy programování v jazyce Java s využitím vývojového prostředí NetBeans. 1 Grafické rozhraní Studijní cíl Tento blok je věnován vytváření programů s využitím grafického rozhraní (GUI). Vysvětlen bude základní filozofie pro vytváření aplikací s GUI ve srovnání s konzolovými

Více

GUI. JavaFX. Java UI, letní semestr 2017/2018 1

GUI. JavaFX. Java UI, letní semestr 2017/2018 1 GUI JavaFX 1 Přehled Java GUI Java 1.0 (1996) AWT použití nativních GUI komponent Java 1.2 (2000) Swing kompletní GUI v Javě JavaFX (2007) nová technologie běžící nad Java VM ale vlastní jazyk deklarativní

Více

Copyright Rudolf Pecinovský, Soubor: 02_Rozhraní x Interfejs.doc, verze 1.00.2413, uloženo čt 9.10.2014 12:44 1z 55. Rozhraní. interface (interfejs)

Copyright Rudolf Pecinovský, Soubor: 02_Rozhraní x Interfejs.doc, verze 1.00.2413, uloženo čt 9.10.2014 12:44 1z 55. Rozhraní. interface (interfejs) Copyright Rudolf Pecinovský, Soubor: 02_Rozhraní x Interfejs.doc, verze 1.00.2413, uloženo čt 9.10.2014 12:44 1z 55 Rozhraní interface (interfejs) Obsah Copyright Rudolf Pecinovský, Soubor: 02_Rozhraní

Více

Bridge. Známý jako. Účel. Použitelnost. Handle/Body

Bridge. Známý jako. Účel. Použitelnost. Handle/Body Bridge Bridge Známý jako Handle/Body Účel odděluje abstrakci (rozhraní a jeho sémantiku) od její konkrétní implementace předchází zbytečnému nárůstu počtu tříd při přidávání implementací používá se v době

Více

Aplikace s grafickým uživatelským rozhraním

Aplikace s grafickým uživatelským rozhraním Aplikace s grafickým uživatelským rozhraním doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz 1 Typy aplikací Konzolová

Více

IRAE 07/08 Přednáška č. 7. Začátek (head)

IRAE 07/08 Přednáška č. 7. Začátek (head) Fronta (Queue) FIFO First In First Out (první dovnitř první ven) Vložení položky (Enqueue) Vyjmutí položky (Dequeue) Přidávání prvků Konec (Tail) Začátek (head) na jedné straně (konec) Odebírání prvků

Více

Programátorská příručka

Programátorská příručka KAPITOLA 1. PROGRAMÁTORSKÁ PŘÍRUČKA Kapitola 1 Programátorská příručka 1.1 Úvod 1.1.1 Technologie Program je psaný v jazyce Java 1.7. GUI je vytvářeno pomocí knihovny SWT. (http://eclipse.org/swt/) Pro

Více

1 Uživatelská dokumentace

1 Uživatelská dokumentace 1 Uživatelská dokumentace Systém pro závodění aut řízených umělou inteligencí je zaměřen na závodění aut v prostředí internetu. Kromě toho umožňuje testovat jednotlivé řidiče bez nutnosti vytvářet závod

Více

1. Programování proti rozhraní

1. Programování proti rozhraní 1. Programování proti rozhraní Cíl látky Cílem tohoto bloku je seznámení se s jednou z nejdůležitější programátorskou technikou v objektově orientovaném programování. Tou technikou je využívaní rozhraní

Více

Java aplety. Předávání parametrů z HTML

Java aplety. Předávání parametrů z HTML Java aplety Aplety jsou speciální formou Java aplikací - mohou být spouštěny z prostředí WWW prohlížeče. Aby je prohlížeč spustil, musíme vložit do HTML stránky potřebné příkazy:

Více

Vlákno (anglicky: thread) v informatice označuje vlákno výpočtu neboli samostatný výpočetní tok, tedy posloupnost po sobě jdoucích operací.

Vlákno (anglicky: thread) v informatice označuje vlákno výpočtu neboli samostatný výpočetní tok, tedy posloupnost po sobě jdoucích operací. Trochu teorie Vlákno (anglicky: thread) v informatice označuje vlákno výpočtu neboli samostatný výpočetní tok, tedy posloupnost po sobě jdoucích operací. Každá spuštěná aplikace má alespoň jeden proces

Více

01. HODINA. 1.1 Spuštění programu VB 2010. 1.2 Prvky integrovaného vývojového prostředí. - pomocí ikony, z menu Start.

01. HODINA. 1.1 Spuštění programu VB 2010. 1.2 Prvky integrovaného vývojového prostředí. - pomocí ikony, z menu Start. 01. HODINA 1.1 Spuštění programu VB 2010 - pomocí ikony, z menu Start. - po spuštění si můžeme vybrat, zda chceme vytvořit nový Projekt a jaký nebo zda chceme otevřít již existující Projekt. 1.2 Prvky

Více

TÉMATICKÝ OKRUH Softwarové inženýrství

TÉMATICKÝ OKRUH Softwarové inženýrství TÉMATICKÝ OKRUH Softwarové inženýrství Číslo otázky : 29. Otázka : Zpracování událostí: mechanismus událostí a jejich zpracování (Event/Listener), nepřímá invokace (Observer/Observable). Obsah : 1. Mechanisums

Více

Generické programování

Generické programování Generické programování Od C# verze 2.0 = vytváření kódu s obecným datovým typem Příklad generická metoda, zamění dva parametry: static void Swap(ref T p1, ref T p2) T temp; temp = p1; p1 = p2; p2 =

Více

Tento projekt je spolufinancován Evropským sociálním fondem a státním rozpočtem České republiky. PORTÁL KUDY KAM. Manuál pro administrátory. Verze 1.

Tento projekt je spolufinancován Evropským sociálním fondem a státním rozpočtem České republiky. PORTÁL KUDY KAM. Manuál pro administrátory. Verze 1. Tento projekt je spolufinancován Evropským sociálním fondem a státním rozpočtem České republiky. PORTÁL KUDY KAM Manuál pro administrátory Verze 1.0 2012 AutoCont CZ a.s. Veškerá práva vyhrazena. Tento

Více

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007 Úvod do programovacích jazyků (Java) Michal Krátký 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků

Více

02. HODINA. 2.1 Typy souborů a objektů. 2.2 Ovládací prvky Label a TextBox

02. HODINA. 2.1 Typy souborů a objektů. 2.2 Ovládací prvky Label a TextBox 02. HODINA Obsah: 1. Typy souborů a objektů 2. Ovládací prvky Label a TextBox 3. Základní příkazy a vlastnosti ovládacích prvků 4. Práce s objekty (ovládací prvky a jejich vlastnosti) 2.1 Typy souborů

Více

Úvod do počítačových sítí

Úvod do počítačových sítí Úvod do počítačových sítí Jméno a příjmení: Jan Tichava Osobní číslo: Studijní skupina: středa, 3 4 Obor: INIB INF E-mail: jtichava@students.zcu.cz Datum odevzdání: 19.12.06 Základní charakteristika Jednoduchá

Více

Procesy a vlákna (Processes and Threads)

Procesy a vlákna (Processes and Threads) ÚVOD DO OPERAČNÍCH SYSTÉMŮ Ver.1.00 Procesy a vlákna (Processes and Threads) Správa procesů a vláken České vysoké učení technické Fakulta elektrotechnická 2012 Použitá literatura [1] Stallings, W.: Operating

Více

Další nutný soubor je laydiv.js, ve kterém jsou uloženy funkce pro zobrazování virů na ploše a funkce pro odkaz na Teachers Guide.

Další nutný soubor je laydiv.js, ve kterém jsou uloženy funkce pro zobrazování virů na ploše a funkce pro odkaz na Teachers Guide. ESCAPE OF VIRUSES Hra Escape of viruses je psána pomocí příkazů Javascriptu a standardních příkazů HTML. Hra se spouští tlačítkem Start game. Úkolem hráče je eliminovat viry na hrací ploše kliknutím kurzoru

Více

11.5.2012. Obsah přednášky 9. Skrývání informací. Skrývání informací. Zapouzdření. Skrývání informací. Základy programování (IZAPR, IZKPR) Přednáška 9

11.5.2012. Obsah přednášky 9. Skrývání informací. Skrývání informací. Zapouzdření. Skrývání informací. Základy programování (IZAPR, IZKPR) Přednáška 9 Obsah přednášky 9 Základy programování (IZAPR, IZKPR) Přednáška 9 Základy dědičnosti, přístupová práva Ing. Michael Bažant, Ph.D. Katedra softwarových technologií Kancelář č. 03 022, Náměstí Čs. legií

Více

Reliance 3 design OBSAH

Reliance 3 design OBSAH Reliance 3 design Obsah OBSAH 1. První kroky... 3 1.1 Úvod... 3 1.2 Založení nového projektu... 4 1.3 Tvorba projektu... 6 1.3.1 Správce stanic definice stanic, proměnných, stavových hlášení a komunikačních

Více

GUI - úvod. V této kapitole si ukážeme návod, jak vytvořit jednoduchou grafickou aplikaci a umístit do ní některé další grafické prvky.

GUI - úvod. V této kapitole si ukážeme návod, jak vytvořit jednoduchou grafickou aplikaci a umístit do ní některé další grafické prvky. GUI - úvod V této kapitole si ukážeme návod, jak vytvořit jednoduchou grafickou aplikaci a umístit do ní některé další grafické prvky. Klíčové pojmy: Grafické uživatelské rozhraní, grafické komponenty,

Více

Management procesu I Mgr. Josef Horálek

Management procesu I Mgr. Josef Horálek Management procesu I Mgr. Josef Horálek Procesy = Starší počítače umožňovaly spouštět pouze jeden program. Tento program plně využíval OS i všechny systémové zdroje. Současné počítače umožňují běh více

Více

Úvod do JavaFX RICHARD LIPKA

Úvod do JavaFX RICHARD LIPKA Úvod do JavaFX RICHARD LIPKA 26.2.2018 GUI a OS OS (jeho moduly) poskytuje funkce pro vytváření oken a základních GUI prvků Ve Windows Win32 / Win64 / WinCE API V OS X Cocoa, Quartz V Linuxu není v OS,

Více

Služba ve Windows. Služba (service) je program

Služba ve Windows. Služba (service) je program Služby Windows Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Ing. Libor Otáhalík. Dostupné z Metodického portálu www.rvp.cz, ISSN: 1802-4785. Provozuje Národní ústav pro vzdělávání, školské

Více

14.4.2010. Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

14.4.2010. Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod. Základy programování (IZAPR) Přednáška 7 Ing. Michael Bažant, Ph.D. Katedra softwarových technologií Kancelář č. 229, Náměstí Čs. legií Michael.Bazant@upce.cz Obsah přednášky 7 Parametry metod, předávání

Více

Architektura rodiny operačních systémů Windows NT Mgr. Josef Horálek

Architektura rodiny operačních systémů Windows NT Mgr. Josef Horálek Architektura rodiny operačních systémů Windows NT Mgr. Josef Horálek = Velmi malé jádro = implementuje jen vybrané základní mechanismy: = virtuální paměť; = plánování vláken; = obsluha výjimek; = zasílání

Více

MATLABLINK - VZDÁLENÉ OVLÁDÁNÍ A MONITOROVÁNÍ TECHNOLOGICKÝCH PROCESŮ

MATLABLINK - VZDÁLENÉ OVLÁDÁNÍ A MONITOROVÁNÍ TECHNOLOGICKÝCH PROCESŮ MATLABLINK - VZDÁLENÉ OVLÁDÁNÍ A MONITOROVÁNÍ TECHNOLOGICKÝCH PROCESŮ M. Sysel, I. Pomykacz Univerzita Tomáše Bati ve Zlíně, Fakulta aplikované informatiky Nad Stráněmi 4511, 760 05 Zlín, Česká republika

Více

Google Web Toolkit. Martin Šurkovský, SUR března Katedra informatiky

Google Web Toolkit. Martin Šurkovský, SUR března Katedra informatiky Google Web Toolkit Martin Šurkovský, SUR096 Vysoká škola Báňská - Technická univerzita Ostrava Katedra informatiky 29. března 2010 Martin Šurkovský, SUR096 (VŠB - TUO) Google Web Toolkit 29. března 2010

Více

Tematický celek Proměnné. Proměnné slouží k dočasnému uchovávání hodnot během provádění aplikace Deklarace proměnných

Tematický celek Proměnné. Proměnné slouží k dočasnému uchovávání hodnot během provádění aplikace Deklarace proměnných Tematický celek 03 3.1 Proměnné Proměnné slouží k dočasnému uchovávání hodnot během provádění aplikace. 3.1.1 Deklarace proměnných Dim jméno_proměnné [As typ] - deklarace uvnitř procedury platí pouze pro

Více

GUI. Systémová integrace pro desktopové aplikace

GUI. Systémová integrace pro desktopové aplikace GUI Systémová integrace pro desktopové aplikace 1 java.awt.desktop systémová integrace desktopových aplikací static boolean isdesktopsupported() test zda je integrace k dispozici static Desktop getdesktop()

Více

Nový způsob práce s průběžnou klasifikací lze nastavit pouze tehdy, je-li průběžná klasifikace v evidenčním pololetí a školním roce prázdná.

Nový způsob práce s průběžnou klasifikací lze nastavit pouze tehdy, je-li průběžná klasifikace v evidenčním pololetí a školním roce prázdná. Průběžná klasifikace Nová verze modulu Klasifikace žáků přináší novinky především v práci s průběžnou klasifikací. Pro zadání průběžné klasifikace ve třídě doposud existovaly 3 funkce Průběžná klasifikace,

Více

Zpravodaj. Uživatelská příručka. Verze

Zpravodaj. Uživatelská příručka. Verze Zpravodaj Uživatelská příručka Verze 02.01.02 1. Úvod... 3 2. Jak číst tuto příručku... 4 3. Funkčnost... 5 3.1. Seznam zpráv... 5 4. Ovládání programu... 6 4.1. Hlavní okno serveru... 6 4.2. Seznam zpráv...

Více

PŘETĚŽOVÁNÍ OPERÁTORŮ

PŘETĚŽOVÁNÍ OPERÁTORŮ PŘETĚŽOVÁNÍ OPERÁTORŮ Jazyk C# podobně jako jazyk C++ umožňuje přetěžovat operátory, tj. rozšířit definice některých standardních operátorů na uživatelem definované typy (třídy a struktury). Stejně jako

Více

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007 Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků

Více

Základy objektové orientace I. Únor 2010

Základy objektové orientace I. Únor 2010 Seminář Java Základy objektové orientace I Radek Kočí Fakulta informačních technologií VUT Únor 2010 Radek Kočí Seminář Java Základy OO (1) 1/ 20 Téma přednášky Charakteristika objektově orientovaných

Více

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007 Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků

Více

Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody

Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody Dynamická alokace paměti Jazyky C a C++ poskytují programu možnost vyžádat si část volné operační paměti pro

Více

Instalace programu ProVIS

Instalace programu ProVIS Instalace programu ProVIS Tento program umožňuje instalovat program ProVIS. Umožňuje vybrat, kam se bude instalovat, a jednotlivé součásti instalace. Instalace probíhá v několika krocích. Každý krok má

Více

Statické proměnné a metody. Tomáš Pitner, upravil Marek Šabo

Statické proměnné a metody. Tomáš Pitner, upravil Marek Šabo Statické proměnné a metody Tomáš Pitner, upravil Marek Šabo Úvod Se statickou metodou jsme se setkali už u úplně prvního programu - Hello, world! public class Demo { public static void main(string[] args)

Více

Výčtový typ strana 67

Výčtový typ strana 67 Výčtový typ strana 67 8. Výčtový typ V této kapitole si ukážeme, jak implementovat v Javě statické seznamy konstant (hodnot). Příkladem mohou být dny v týdnu, měsíce v roce, planety obíhající kolem slunce

Více

MBI - technologická realizace modelu

MBI - technologická realizace modelu MBI - technologická realizace modelu 22.1.2015 MBI, Management byznys informatiky Snímek 1 Agenda Technická realizace portálu MBI. Cíle a principy technického řešení. 1.Obsah portálu - objekty v hierarchiích,

Více

Konstruktory a destruktory

Konstruktory a destruktory Konstruktory a destruktory Nedostatek atributy po vytvoření objektu nejsou automaticky inicializovány hodnota atributů je náhodná vytvoření metody pro inicializaci, kterou musí programátor explicitně zavolat,

Více

7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd

7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd 7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd Algoritmizace (Y36ALG), Šumperk - 7. přednáška 1 Třída jako zdroj funkcionality Třída v jazyku Java je programová jednotka tvořená

Více

OPS Paralelní systémy, seznam pojmů, klasifikace

OPS Paralelní systémy, seznam pojmů, klasifikace Moorův zákon (polovina 60. let) : Výpočetní výkon a počet tranzistorů na jeden CPU chip integrovaného obvodu mikroprocesoru se každý jeden až dva roky zdvojnásobí; cena se zmenší na polovinu. Paralelismus

Více

Téma 1: Práce s Desktop. Téma 1: Práce s Desktop

Téma 1: Práce s Desktop. Téma 1: Práce s Desktop Téma 1: Práce s Desktop 1 Teoretické znalosti V této kapitole zjistíte, co skrývají pojmy jako Desktop, GNOME, KDE, Metacity Window Manager, Nautilus a Konqueror. Desktop neboli pracovní plocha patří mezi

Více

NetBeans platforma. Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

NetBeans platforma. Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti NetBeans platforma Aplikační programování v Javě (BI-APJ) - 7 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha Evropský sociální fond Praha & EU: Investujeme

Více

Trosečník v džungli, adventura

Trosečník v džungli, adventura Mendelova univerzita v Brně Provozně ekonomická fakulta Trosečník v džungli, adventura PJJ popis hry Anna Dobešová, cvičení čt 13:00-14:50 Brno 2013 Obsah 2 Obsah 1 Popis hry 3 1.1 Téma hry a podmínky

Více

Tabulka symbolů. Vazba (binding) Vazba - příklad. Deklarace a definice. Miroslav Beneš Dušan Kolář

Tabulka symbolů. Vazba (binding) Vazba - příklad. Deklarace a definice. Miroslav Beneš Dušan Kolář Vazba (binding) Tabulka symbolů Miroslav Beneš Dušan Kolář vazba = spojení mezi entitou a vlastností okamžik vazby (binding time) při návrhu jazyka při implementaci jazyka během překladu/spojování/zavádění

Více

2 Grafický výstup s využitím knihovny

2 Grafický výstup s využitím knihovny 2 Grafický výstup s využitím knihovny Studijní cíl Tento blok je věnován základním principům při vytváření grafického výstupu pomocí standardních metod, které poskytuje grafické rozhraní. V textu budou

Více

20. Projekt Domácí mediotéka

20. Projekt Domácí mediotéka Projekt Domácí mediotéka strana 211 20. Projekt Domácí mediotéka 20.1. Základní popis, zadání úkolu V projektu Domácí mediotéka (Dome) se jednoduchým způsobem evidují CD a videa. Projekt je velmi jednoduchý

Více

Metodika. Architecture First. Rudolf Pecinovský rudolf@pecinovsky.cz

Metodika. Architecture First. Rudolf Pecinovský rudolf@pecinovsky.cz Copyright Rudolf Pecinovský, Soubor: 2014_Comm_PrW_Architecture First Methodology.doc, verze 1.00.2413, uloženo po 9.6.2014 14:43 1 z 39 Metodika Architecture First Rudolf Pecinovský rudolf@pecinovsky.cz

Více

Typy souborů ve STATISTICA. Tento článek poslouží jako přehled hlavních typů souborů v programu

Typy souborů ve STATISTICA. Tento článek poslouží jako přehled hlavních typů souborů v programu StatSoft Typy souborů ve STATISTICA Tento článek poslouží jako přehled hlavních typů souborů v programu STATISTICA, ukáže Vám jejich možnosti a tím Vám dovolí využívat program efektivněji. Jistě jste již

Více

Popis ovládání. Po přihlášení do aplikace se objeví navigátor. Navigátor je stromově seřazen a slouží pro přístup ke všem oknům celé aplikace.

Popis ovládání. Po přihlášení do aplikace se objeví navigátor. Navigátor je stromově seřazen a slouží pro přístup ke všem oknům celé aplikace. Popis ovládání 1. Úvod Tento popis má za úkol seznámit uživatele se základními principy ovládání aplikace. Ovládání je možné pomocí myši, ale všechny činnosti jsou dosažitelné také pomocí klávesnice. 2.

Více

DUM 06 téma: Tvorba makra pomocí VBA

DUM 06 téma: Tvorba makra pomocí VBA DUM 06 téma: Tvorba makra pomocí VBA ze sady: 03 tematický okruh sady: Tvorba skript a maker ze šablony: 10 Algoritmizace a programování určeno pro: 4. ročník vzdělávací obor: 18-20-M/01 Informační technologie

Více

Příručka pro aplikaci KSnapshot

Příručka pro aplikaci KSnapshot Richard J. Moore Robert L. McCormick Brad Hards Kontrolor: Lauri Watts Vývojář: Richard J Moore Vývojář: Matthias Ettrich Překlad: Lukáš Vlček 2 Obsah 1 Úvod 5 2 Použití KSnapshot 6 2.1 Spuštění KSnapshot.....................................

Více

První kapitola úvod do problematiky

První kapitola úvod do problematiky První kapitola úvod do problematiky Co je to Flex Adobe Flex je ActionSript (AS) framework pro tvorbu Rich Internet Aplications (RIA), tedy knihovna AS tříd pro Flash. Flex používáme k vytvoření SWF souboru

Více

1. Dědičnost a polymorfismus

1. Dědičnost a polymorfismus 1. Dědičnost a polymorfismus Cíl látky Cílem této kapitoly je představit klíčové pojmy dědičnosti a polymorfismu. Předtím však je nutné se seznámit se základními pojmy zobecnění neboli generalizace. Komentář

Více

11 Diagram tříd, asociace, dědičnost, abstraktní třídy

11 Diagram tříd, asociace, dědičnost, abstraktní třídy 11 Diagram tříd, asociace, dědičnost, abstraktní třídy Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost diagramům tříd, asociaci,

Více

KTE / ZPE Informační technologie

KTE / ZPE Informační technologie 4 KTE / ZPE Informační technologie Ing. Petr Kropík, Ph.D. email: pkropik@kte.zcu.cz tel.: +420 377 63 4639, +420 377 63 4606 (odd. informatiky) Katedra teoretické elektrotechniky FEL ZČU Plzeň Největší

Více

TAOS321. Administrace. příručka správce systému. informační terminál systému JSVV

TAOS321. Administrace. příručka správce systému. informační terminál systému JSVV TAOS321 informační terminál systému JSVV Administrace příručka správce systému Text odpovídá verzi firmware: TAOS321 1.0 2014, Technologie 2000 spol. s r.o. Jablonec nad Nisou TAOS321 informační terminál

Více

Principy operačních systémů. Lekce 5: Multiprogramming a multitasking, vlákna

Principy operačních systémů. Lekce 5: Multiprogramming a multitasking, vlákna Principy operačních systémů Lekce 5: Multiprogramming a multitasking, vlákna Multiprogramování předchůdce multitaskingu Vzájemné volání: Implementován procesem (nikoliv OS) Procesu je přidělen procesor,

Více

MS WINDOWS I. řada operačních systémů firmy Microsoft *1985 -? Historie. Práce ve Windows XP. Architektura. Instalace. Spouštění

MS WINDOWS I. řada operačních systémů firmy Microsoft *1985 -? Historie. Práce ve Windows XP. Architektura. Instalace. Spouštění MS WINDOWS I řada operačních systémů firmy Microsoft *1985 -? Historie Práce ve Windows XP Architektura Instalace Spouštění HISTORIE I MS-DOS 1981, první OS firmy Microsoft, pro IBM PC 16b, textový, jednouživatelský,

Více

Class loader. každá třída (java.lang.class) obsahuje referenci na svůj class loader. Implementace class loaderu

Class loader. každá třída (java.lang.class) obsahuje referenci na svůj class loader. Implementace class loaderu Seminář Java Zavádění tříd Radek Kočí Fakulta informačních technologií VUT Duben 2008 Radek Kočí Seminář Java Zavádění tříd 1/ 16 JVM zavádí třídy dynamicky Class loader objekt schopný zavádět třídy abstraktní

Více

Zdokonalování gramotnosti v oblasti ICT. Kurz MS Excel kurz 6. Inovace a modernizace studijních oborů FSpS (IMPACT) CZ.1.07/2.2.00/28.

Zdokonalování gramotnosti v oblasti ICT. Kurz MS Excel kurz 6. Inovace a modernizace studijních oborů FSpS (IMPACT) CZ.1.07/2.2.00/28. Zdokonalování gramotnosti v oblasti ICT Kurz MS Excel kurz 6 1 Obsah Kontingenční tabulky... 3 Zdroj dat... 3 Příprava dat... 3 Vytvoření kontingenční tabulky... 3 Možnosti v poli Hodnoty... 7 Aktualizace

Více

TECHNOLOGIE ELASTICKÉ KONFORMNÍ TRANSFORMACE RASTROVÝCH OBRAZŮ

TECHNOLOGIE ELASTICKÉ KONFORMNÍ TRANSFORMACE RASTROVÝCH OBRAZŮ TECHNOLOGIE ELASTICKÉ KONFORMNÍ TRANSFORMACE RASTROVÝCH OBRAZŮ ÚVOD Technologie elastické konformní transformace rastrových obrazů je realizována v rámci webové aplikace NKT. Tato webová aplikace provádí

Více

Algoritmizace a programování

Algoritmizace a programování Algoritmizace a programování Struktura programu Vytvoření nové aplikace Struktura programu Základní syntaktické elementy První aplikace Verze pro akademický rok 2012/2013 1 Nová aplikace NetBeans Ve vývojovém

Více

7. Datové typy v Javě

7. Datové typy v Javě 7. Datové typy v Javě Primitivní vs. objektové typy Kategorie primitivních typů: integrální, boolean, čísla s pohyblivou řádovou čárkou Pole: deklarace, vytvoření, naplnění, přístup k prvkům, rozsah indexů

Více

TŘÍDY POKRAČOVÁNÍ. Události pokračování. Příklad. public delegate void ZmenaSouradnicEventHandler (object sender, EventArgs e);

TŘÍDY POKRAČOVÁNÍ. Události pokračování. Příklad. public delegate void ZmenaSouradnicEventHandler (object sender, EventArgs e); TŘÍDY POKRAČOVÁNÍ Události pokračování public delegate void ZmenaSouradnicEventHandler (object sender, EventArgs e); class Bod private int x; private int y; public event ZmenaSouradnicEventHandler ZmenaSouradnic;

Více

Přidělování CPU Mgr. Josef Horálek

Přidělování CPU Mgr. Josef Horálek Přidělování CPU Mgr. Josef Horálek Přidělování CPU = Přidělování CPU je základ multiprogramového OS = pomocí přidělování CPU různým procesům OS zvyšuje výkon výpočetního systému; = Základní myšlenka multiprogramování

Více

Vzorce. Suma. Tvorba vzorce napsáním. Tvorba vzorců průvodcem

Vzorce. Suma. Tvorba vzorce napsáním. Tvorba vzorců průvodcem Vzorce Vzorce v Excelu lze zadávat dvěma způsoby. Buď známe přesný zápis vzorce a přímo ho do buňky napíšeme, nebo použijeme takzvaného průvodce při tvorbě vzorce (zejména u složitějších funkcí). Tvorba

Více

Struktura programu v době běhu

Struktura programu v době běhu Struktura programu v době běhu Miroslav Beneš Dušan Kolář Struktura programu v době běhu Vztah mezi zdrojovým programem a činností přeloženého programu reprezentace dat správa paměti aktivace podprogramů

Více

UJO Framework. revoluční architektura beans. verze 0.80 http://ujoframework.org/

UJO Framework. revoluční architektura beans. verze 0.80 http://ujoframework.org/ UJO Framework revoluční architektura beans verze 0.80 http://ujoframework.org/ Pavel Pone(c), září 2008 Historie rok 2004 upravené objekty z frameworku Cayenne nevýhodou byla špatná typová kontrola rok

Více

Vaše jistota na trhu IT. Balíčky. Rudolf Pecinovský rudolf@pecinovsky.cz

Vaše jistota na trhu IT. Balíčky. Rudolf Pecinovský rudolf@pecinovsky.cz Vaše jistota na trhu IT Balíčky Rudolf Pecinovský rudolf@pecinovsky.cz Problémy velkých aplikací Rozsáhlé aplikace používají velké množství názvů objektů a jejich zpráv, které různé části programu sdílí

Více

NSWI096 - INTERNET JavaScript

NSWI096 - INTERNET JavaScript NSWI096 - INTERNET JavaScript Mgr. Petr Lasák JAVASCRIPT JAK SE DNES POUŽÍVÁ Skriptovací (interpretovaný) jazyk Umožňuje interaktivitu Použití: Dialogy Kontrola dat ve formulářích Změny v (X)HTML dokumentu

Více

Abstraktní datové typy: zásobník

Abstraktní datové typy: zásobník Abstraktní datové typy: zásobník doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz Abstraktní datové typy omezené rozhraní

Více

typová konverze typová inference

typová konverze typová inference Seminář Java Programování v Javě II Radek Kočí Fakulta informačních technologií VUT Únor 2008 Radek Kočí Seminář Java Programování v Javě (2) 1/ 36 Téma přednášky Rozhraní: použití, dědičnost Hierarchie

Více

Tento projekt je spolufinancován Evropským sociálním fondem a státním rozpočtem České republiky. PORTÁL KUDY KAM. Manuál pro editaci ŽS. Verze 1.

Tento projekt je spolufinancován Evropským sociálním fondem a státním rozpočtem České republiky. PORTÁL KUDY KAM. Manuál pro editaci ŽS. Verze 1. Tento projekt je spolufinancován Evropským sociálním fondem a státním rozpočtem České republiky. PORTÁL KUDY KAM Manuál pro editaci ŽS Verze 1.0 2012 AutoCont CZ a.s. Veškerá práva vyhrazena. Tento dokument

Více

Uživatelský manuál. Aplikace GraphViewer. Vytvořil: Viktor Dlouhý

Uživatelský manuál. Aplikace GraphViewer. Vytvořil: Viktor Dlouhý Uživatelský manuál Aplikace GraphViewer Vytvořil: Viktor Dlouhý Obsah 1. Obecně... 3 2. Co aplikace umí... 3 3. Struktura aplikace... 4 4. Mobilní verze aplikace... 5 5. Vytvoření projektu... 6 6. Části

Více

OMO. 4 - Creational design patterns A. Singleton Simple Factory Factory Method Abstract Factory Prototype Builder IoC

OMO. 4 - Creational design patterns A. Singleton Simple Factory Factory Method Abstract Factory Prototype Builder IoC OMO 4 - Creational design patterns A Singleton Simple Factory Factory Method Abstract Factory Prototype Builder IoC Ing. David Kadleček, PhD. kadlecd@fel.cvut.cz, david.kadlecek@cz.ibm.com 1 Creational

Více

Obsah přednášky. 12. Dokumentace zdrojového kódu Tvorba elektronické dokumentace UML. Co je diagram tříd. Ing. Ondřej Guth

Obsah přednášky. 12. Dokumentace zdrojového kódu Tvorba elektronické dokumentace UML. Co je diagram tříd. Ing. Ondřej Guth Evropský sociální fond. 12. Dokumentace zdrojového kódu Tvorba elektronické dokumentace Ing. Ondřej Guth Katedra teoretické informatiky Fakulta informačních technologií České vysoké učení technické v Praze

Více

Třídy. Instance. Pokud tento program spustíme, vypíše následující. car1 má barvu Red. car2 má barvu Red. car1 má barvu Blue.

Třídy. Instance. Pokud tento program spustíme, vypíše následující. car1 má barvu Red. car2 má barvu Red. car1 má barvu Blue. 23. Třídy, generické třídy, instance, skládání, statické metody a proměnné. Zapouzdření, konstruktory, konzistence objektu, zpřístupnění vnitřní implementace, modifikátory public a private. Polymorfismus,

Více

8. GRAFICKÉ UŽIVATELSKÉ ROZHRANÍ

8. GRAFICKÉ UŽIVATELSKÉ ROZHRANÍ 8. GRAFICKÉ UŽIVATELSKÉ ROZHRANÍ Abstract Window Toolkit (AWT) je část Java Core API, kterou tvoří balíky: java.awt, java.awt.event (od JDK 1.1), java.awt.image, java.awt.datatransfer (od JDK 1.1). AWT

Více

Obslužný software. PAP ISO 9001

Obslužný software.  PAP ISO 9001 Obslužný software PAP www.apoelmos.cz ISO 9001 červen 2008, TD-U-19-20 OBSAH 1 Úvod... 4 2 Pokyny pro instalaci... 4 2.1 Požadavky na hardware...4 2.2 Postup při instalaci...4 3 Popis software... 5 3.1

Více

Úvod...1 Instalace...1 Popis funkcí...2 Hlavní obrazovka...2 Menu...3 Práce s aplikací - příklad...5

Úvod...1 Instalace...1 Popis funkcí...2 Hlavní obrazovka...2 Menu...3 Práce s aplikací - příklad...5 Rejstřík Úvod...1 Instalace...1 Popis funkcí...2 Hlavní obrazovka...2 Menu...3 Práce s aplikací - příklad...5 Úvod Správcovská aplikace slouží k vytvoření vstupního a zašifrovaného souboru pro odečtovou

Více

Java a XML. 10/26/09 1/7 Java a XML

Java a XML. 10/26/09 1/7 Java a XML Java a XML Java i XML jsou přenositelné V javě existuje podpora pro práci s XML, nejčastější akce prováděné při zpracování XML: načítání XML elementů generování nových elementů nebo úprava starého zápis

Více

GUI. Systémová integrace pro desktopové aplikace

GUI. Systémová integrace pro desktopové aplikace GUI Systémová integrace pro desktopové aplikace Java, zimní semestr 2016 11.1.2017 1 java.awt.desktop systémová integrace desktopových aplikací static boolean isdesktopsupported() test zda je integrace

Více

Quo vadis programování? Automatizace vyhodnocování studentských úloh

Quo vadis programování? Automatizace vyhodnocování studentských úloh Vaše jistota na trhu IT Quo vadis programování? Automatizace vyhodnocování studentských úloh Rudolf PECINOVSKÝ rudolf@pecinovsky.cz Vladimír Oraný vladimir.orany@gmail.com Vaše jistota na trhu IT Obsah

Více

Komponenty v.net. Obsah přednášky

Komponenty v.net. Obsah přednášky doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz Obsah přednášky Rozdíl mezi COM a.net Distribuce komponent Programování

Více

Návrhové vzory. Jakub Klemsa, Jan Legerský. 30. října Objektově orientované programování.

Návrhové vzory. Jakub Klemsa, Jan Legerský. 30. října Objektově orientované programování. Jakub Klemsa Jan Legerský Objektově orientované programování klemsjak@fjfi.cvut.cz jan.legersky@gmail.com 30. října 2012 návrhový vzor (design pattern) obecné řešení problému, které se využívá při návrhu

Více

44 Organizace akcí. Popis modulu. Záložka Seznam akcí

44 Organizace akcí. Popis modulu. Záložka Seznam akcí 44 Organizace akcí Modul Organizace akcí slouží k přípravě a plánování různých společenských, sportovních, kulturních, apod. akcí. Tyto akce je možné dále dělit do částí (ve stromové struktuře) a plánovat

Více

UniLog-D. v1.01 návod k obsluze software. Strana 1

UniLog-D. v1.01 návod k obsluze software. Strana 1 UniLog-D v1.01 návod k obsluze software Strana 1 UniLog-D je PC program, který slouží k přípravě karty pro záznam událostí aplikací přístroje M-BOX, dále pak k prohlížení, vyhodnocení a exportům zaznamenaných

Více

MS Excel makra a VBA

MS Excel makra a VBA Autor: RNDr. Obsah: MS Excel makra a VBA 1 Využití, ukázky, výhody a nevýhody... 2 2 Makra a zabezpečení... 2 2.1 Nastavení zabezpečení Excelu... 2 2.2 Uložení maker do sešitu a osobního sešitu maker...

Více

Teoretické minimum z PJV

Teoretické minimum z PJV Teoretické minimum z PJV Pozn.: následující text popisuje vlastnosti jazyka Java zjednodušeně pouze pro potřeby výuky. Třída Zavádí se v programu deklarací třídy což je část programu od klíčových slov

Více

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007 Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků

Více

Implementace LL(1) překladů

Implementace LL(1) překladů Překladače, přednáška č. 6 Ústav informatiky, FPF SU Opava sarka.vavreckova@fpf.slu.cz Poslední aktualizace: 30. října 2007 Postup Programujeme syntaktickou analýzu: 1 Navrhneme vhodnou LL(1) gramatiku

Více

PALSTAT s.r.o. systémy řízení jakosti PALSTAT CAQ verze. 3.00.01.16 Výstupní kontrola 07.1/2009. 1 Obsah

PALSTAT s.r.o. systémy řízení jakosti PALSTAT CAQ verze. 3.00.01.16 Výstupní kontrola 07.1/2009. 1 Obsah 1 Obsah 1 Obsah... 1 2 Úvod... 2 2.1 Výhody... 2 2.2 Základní ovládání... 2 3 Menu... 3 3.1 Menu Soubor... 3 3.1.1 Menu Soubor/Filtr... 3 3.1.2 Menu Soubor/Tisk vybraného záznamu... 3 3.1.3 Menu Soubor/Tisk

Více

Datové struktury. alg12 1

Datové struktury. alg12 1 Datové struktury Jedna z klasických knih o programování (autor prof. Wirth) má název Algorithms + Data structures = Programs Datová struktura je množina dat (prvků, složek, datových objektů), pro kterou

Více