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.



Podobné dokumenty
Aplikace s grafickým uživatelským rozhraním

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.

Java GUI události. Událostmi řízené programování. Zpracování = obsluha událostí

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

01_Grafické rozhraní

Java - výjimky. private void vstup() throws IOException {... }

Grafické uživatelské rozhraní v Javě. A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické

Klíčová slova: OOP, konstruktor, destruktor, třída, objekt, atribut, metoda

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

Grafické uživatelské rozhraní v Javě. A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické

Události. A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické

GUI v Javě a událostmi řízené programování

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

Projekty pro výuku programování v jazyce Java

Obsah přednášky. GUI v Javě a událostmi řízené programování. Základní prvky grafického rozhraní. Základní komponenty.

GUI v Javě a událostmi řízené programování

GUI v Javě a událostmi řízené programování

GUI v Javě (připomínka) Návrhář GUI Příklad aplikace MVC Model-View-Controller Události Vnitřní třídy. MVC Model-View-Controller

2 Tvorba interaktivních grafických programů

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

Java - Kresba. 2/28/11 1/8 Java - kresba

Obsah přednášky. GUI v Javě a událostmi řízené programování. Základní prvky grafického rozhraní. Základní komponenty.

Úloha 1. Text úlohy. Vyberte jednu z nabízených možností: NEPRAVDA. PRAVDA Úloha 2. Text úlohy

8 Třídy, objekty, metody, předávání argumentů metod

GUI v Javě. GUI v Javě GUI komponenty a kontejnery Dialogová okna Události a obsluha událostí z GUI

GUI v Javě. Jiří Vokřínek. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze. Přednáška 5 B0B36PJV Programování v JAVA

Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost rozhraním a výjimkám.

1. Dědičnost a polymorfismus

10 Balíčky, grafické znázornění tříd, základy zapozdření

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

Diplomová práce Plugin do Eclipse pro tvorbu GUI s konfigurovatelným generováním zdrojového kódu

Obsah. Úvod 11 Základy programování 11 Objektový přístup 11 Procvičování 11 Zvláštní odstavce 12 Zpětná vazba od čtenářů 12 Errata 13

1. Programování proti rozhraní

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

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

GUI v Javě. Jiří Vokřínek. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze. Přednáška 5 B0B36PJV Programování v JAVA

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

8. GRAFICKÉ UŽIVATELSKÉ ROZHRANÍ

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace

Výčtový typ strana 67

8. Grafické uživatelské rozhraní

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

GUI. Systémová integrace pro desktopové aplikace

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

VIII. Seminář Java VIII p.1/36

Generické programování

KTE / ZPE Informační technologie

Programovací jazyk Java

Souhrn výukových materiálů ke kurzu: Tvorba výukových materiálů pomocí tabletu (B3.6)

Abstraktní třída a rozhraní

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

20. Projekt Domácí mediotéka

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

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

Úvod do programovacích jazyků (Java)

Tvorba grafického uživatelského rozhraní v BlueJ

Třídy, polymorfismus. A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické

1 Nejkratší cesta grafem

Práce se soubory v Javě

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

Algoritmizace a programování

JAVA GUI Java, zimní semestr

24. listopadu 2013, Brno Připravil: David Procházka

Úvod do programování - Java. Cvičení č.4

7 Formátovaný výstup, třídy, objekty, pole, chyby v programech

IB111 Programování a algoritmizace. Objektově orientované programování (OOP)

PB161 Programování v jazyce C++ Přednáška 7

PB161 Programování v jazyce C++ Přednáška 7

Obrázek 6.14: Prohlížec nápovedy

Z. Kotala, P. Toman: Java ( Obsah )

Programátorská příručka

Principy objektově orientovaného programování

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace

IRAE 07/08 Přednáška č. 1

JAVA Unit testing Java, zimní semestr

Abstraktní datové typy: zásobník

Swing. Přehled komponent. Java UI, letní semestr 2017/2018 1

Algoritmizace a programování

Dědičnost. seskupování tříd do hierarchie. potomek získá všechny vlastnosti a metody. provádí se pomocí dvojtečky za názvem třídy.

Vytváření a použití knihoven tříd

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace

13 Barvy a úpravy rastrového

ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ v Praze Ú12110 Ústav přístrojové a řídící techniky

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

Programování II. Návrh programu I 2018/19

Část I Příklad - Generické typy, iterátor

IRAE 07/08 Přednáška č. 2. atr1 atr2. atr1 atr2 -33

Programové konvence, dokumentace a ladění. Programování II 2. přednáška Alena Buchalcevová

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

Základy objektové orientace I. Únor 2010

UJO Framework. revoluční architektura beans. verze

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

Seminář Java II p.1/43

PREPROCESOR POKRAČOVÁNÍ

GUI v Jav a událostmi ízené programování

Jazyk C# (seminář 6)

Datové struktury. alg12 1

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

Část I Příklad - Generické typy, iterátor

Transkript:

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 aplikacemi. Text se bude postupně zabývat zobrazením hlavního okna aplikace, přidání ovládacích komponent a obsluha událostí. Na jednoduchých příkladech bude demonstrováno použití základních ovládacích komponent a jejich důležitých základních vlastností. Doba nutná k nastudování 3-4 hodiny Průvodce studiem 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.1 Programování aplikací s GUI Jak již bylo naznačeno v definování studijního cíle pro tento blok, prostor bude věnován především základům vytváření aplikací s grafickým uživatelským rozhraním (GUI, Graphical User Interface). Základní náplní předmětu je především vysvětlení principů základních grafických algoritmů a samotná výuka tvorby aplikací GUI do náplně předmětu zapadá pouze okrajově. Vzhledem k tomu, že součástí předmětu je i implementace vybraných algoritmů a tvorba jednoduchých grafických aplikací, je nezbytné, aby studenti byli obeznámeni se základy vytváření GUI aplikací, které umožňují použití grafického režimu. Protože tento předmět volně navazuje na předmět Základy programování, v rámci kterého bylo programování vyučováno pouze s využitím konzolových aplikací, je nutné chápat tento blok jako nezbytný mezičlánek a přípravu k další výuce předmětu. KST/IPOGR 1-1 Petr Veselý

V současné době představuje v oblasti programování tvorba aplikací s grafickým rozhraním tzv. hlavní proud. Vytváření konzolových aplikací je okrajovou záležitostí, která je vyhrazena pouze pro specifické případy. Hlavní rozdíly mezi běžnou konzolovou aplikací a aplikací s GUI lze shrnout do dvou základních bodů: použití komponent (např. existence hlavního okna s ovládacími prvky) a událostmi řízené programování (to je sice možné realizovat i v konzolových aplikacích, ale není to běžné). Princip GUI aplikace je tedy postaven na používání komponent a komunikaci mezi nimi (případně mezi nimi a uživatelem). 1.2 Grafické rozhraní GUI poskytované knihovnami jazyka Java je nezávislé na zařízení (tlačítko bude nebo může vypadat stejně na monitoru stolního PC i např. na tabletu bez ohledu na typu použité grafické karty) a rovněž s ohledem na multiplatformnost programovacího jazyka Java je nezávislé i na OS. Je tvořeno tzv. komponentami, které jsou vizuální nebo nevizuální. Standardní komponenty jsou součástí knihoven AWT a JFC. Komponenty jsou uspořádány do hierarchické stromové struktury na základě dědičnosti, případně implementace rozhraní. Na základě existujících komponent si může programátor vytvořit vlastní komponenty s požadovanými vlastnostmi a požadovaným chováním. V současné době v Javě existují 2 rozhraní: AWT (Abstract Window Toolkit) je zastaralé, obsahuje komponenty závislé na prostředí a je relativně pomalé, v současné době je používáno především pro applety JFC (Java Foundation Class) novější, moderní rozhraní, založeno na AWT, obsahuje nevizuální komponenty (Java Beans) a vizuální komponenty (Swing). Další text se bude týkat výhradně rozhraní s komponentami Swing. KST/IPOGR 1-2 Petr Veselý

1.3 Událostmi řízené programování Události (Event) řídí běh programu. Program je sestaven z jednotlivých komponent, které mohou být dle potřeby zobrazovány a během své existence mohou generovat různé události. Událost rovněž může vzniknout činností uživatele (prostřednictvím určité komponenty), nebo mlže být generována operačním systémem. Všechny události týkající se dané aplikace jsou umisťovány do fronty, ze které jsou postupně vybírány a obsluhovány. To znamená, že program není řízen sledem příkazů (od prvního k poslednímu) v metodě main, ale je vlastně řízen smyčkou obsluhující frontu událostí (zpráv). Na komponenty jsou navázáni posluchači (listener), registrující na jednotlivé události. Obsluha jednotlivých událostí (reakce na událost), tzv. obslužný kód (handlery) jsou umístěny v jednotlivých metodách. S problematikou událostmi řízeného programování úzce souvisí i problematika vláken a vícevláknových aplikací. 1.4 Vytvoření programu a spuštění Vytvoření programu s GUI lze shrnout do následujících kroků: Návrh vzhledu aplikace (návrh grafického rozhraní hlavní okno, rozmístění dalších komponent, vzhled komponent, ) Definování událostí, na které budou jednotlivé komponenty reagovat Vytvoření metod s obslužnými kódy jednotlivých událostí Propojení událostí a obslužných kódů Zabezpečení možnosti ukončení programu Spouštění programu lze shrnout do následujících kroků: Vytvoření instance aplikace včetně vytvoření fronty zpráv a spuštění obslužné smyčky (automaticky, programátor to nemusí řešit) KST/IPOGR 1-3 Petr Veselý

Volání metody main (automaticky, programátor to nemusí řešit) Vytvoření instance hlavního okna Zobrazení hlavního okna 1.5 Základní komponenty Většina používaných komponent je potomkem třídy javax.swing.jcomponent, která je potomkem java.awt.container. Komponenty zle rozdělit do tří základních kategorií dle úrovně: Top-Level komponenty (JFrame, JDialog) Kontejnerové komponenty slouží k seskupování komponent, které jsou do tohoto kontejneru umístěny (JPanel, JScrollPane, JToolbar, JSplitPane, ad.) Základní komponenty (listy) Swing Controls (JButton, JLabel, JRadioButton, JCheckBox, JTextArea, JTextField, JScrollBar, JComboBox, JMenu, JList, JProgressBar, ad.) Rovněž je třeba si uvědomit, že existují jak editovatelné (interaktivní) komponenty, tak komponenty pouze informativní (uživatel nemůže měnit jejich obsah). 1.6 Hierarchie komponent v aplikaci Jednotlivé komponenty každé aplikace je možno uspořádat do stromové struktury, která vyjadřuje hierarchické uspořádání jednotlivých komponent v aplikaci. Z této hierarchie je patrné která komponenta vlastní (obsahuje ve svém kontejneru) jiné komponenty. Na následujícím obrázku je ukázka hierarchie komponent z konkrétní aplikace. Ze stromu komponent je zřejmé, že na vrcholu je komponenta hlavní okno (jframe), která ve svém kontejneru obsahuje tři panely (jpanelhlavni, jpanelparametry a jpanelovladani) atd. KST/IPOGR 1-4 Petr Veselý

Obrázek 1: Ukázka hierarchie komponent v aplikaci 1.7 Zobrazení okna Nejjednodušší aplikace s GUI (tak jak bylo již uvedeno) musí splnit pouze několik základních předpokladů vytvoření instance pro hlavní okno a jeho zobrazení. V následující ukázce je vytvořena aplikace, která po svém spuštění v metodě main: Vytvoří instanci hlavniokno třídy JFrame pro hlavní okno Vytvoří instanci statickytext třídy JLabel pro nápis, který se bude zobrazovat na ploše hlavního okna Instanci statickytext vloží do kontejneru hlavního okna (hlavní okno se stává jeho vlastníkem a zabezpečuje např. jeho zobrazení) Pro hlavní okno se nastaví chování při pokusu o jeho uzavření Provede se implicitní nastavení rozměrů okna dle jeho obsahu Zobrazí se hlavní okno aplikace KST/IPOGR 1-5 Petr Veselý

import javax.swing.jframe; import javax.swing.jlabel; public class MainFrame { public static void main(string[] args) { JFrame hlavniokno = new JFrame("Př_01 - Hlavni okno"); JLabel statickytext = new JLabel ("Hurá, první příklad je na světě..."); hlavniokno.getcontentpane().add(statickytext); hlavniokno.setdefaultcloseoperation (JFrame.EXIT_ON_CLOSE); hlavniokno.pack(); hlavniokno.setvisible(true); Kód 2: Ukázka vytvoření a zobrazení hlavního okna aplikace Obrázek 3: Ukázka spuštěné aplikace Další ukázka vytvoří hlavní okno aplikace se dvěma tlačítky, které budou automaticky rozmístěny dle konkrétního tzv. layoutu. Nastavení zobrazení může být v konstruktoru. Aplikace funguje, ale nic nedělá. Na rozmístění tlačítek má vliv použitý Layout. Bez použití layoutu bude druhé tlačítko přes celé okno. Komponenty lze přidávat i pomocí getcontentpane().add(button1). Metoda pack() umožňuje přizpůsobení velikosti okna svému obsahu. import java.awt.flowlayout; import javax.swing.jbutton; import javax.swing.jframe; public class MainFrame extends JFrame { JButton btn1, btn2; MainFrame () { settitle("příklad zobrazení okna"); setlayout(new FlowLayout()); btn1 = new JButton("Tlačítko 1"); add(btn1); KST/IPOGR 1-6 Petr Veselý

btn2 = new JButton("Tlačítko 2"); add(btn2); setsize(300,100); public static void main (String[] args) { new MainFrame().setVisible(true); Kód 4: Ukázka vytvoření a zobrazení hlavního okna s tlačítky Obrázek 5: Ukázka spuštěné aplikace 1.8 Reakce na událost Události vytváří (vysílá) uživatel (prostřednictvím ovládací komponenty), nebo program nebo systém. Z hlediska programování je to objekt a jiný objekt tyto události zachycuje (posluchač, listener). Zachycovat může pouze objekt s implementovaným rozhraním Listener, kterého si vysílající objekt zaregistruje. V následujícím příkladu obsahuje hlavní okno tlačítko (JButton) a statický text (JLabel). Text ukazuje stav počítadla, které je reprezentováno proměnnou typu int. Pokud se stiskne tlačítko, je počítadlo inkrementováno a jeho nový stav je zobrazen pomocí statického textu. Obrázek 6: Ukázka spuštěné aplikace počítadla Událost stisknutí tlačítka je propojena na obsluhu této události metoda buttonpocitadloactionperformed. KST/IPOGR 1-7 Petr Veselý

Realizace propojení: pomocí metody addactionlistener je tlačítku přidán posluchač (ad-hoc vytvořená instance třídy ActionListener není pojmenována). Tento posluchač při svém vytváření definuje handler actionperformed, což je metoda, která zabezpečí reakci na událost stisknutí tlačítka. Tato metoda navýšení počítadla a zobrazení textu neřeší sama, ale volá metodu buttonpocitadloactionperformed. public class MainFrame extends JFrame { JButton btnpocitadlo; JLabel jlabelpocetstisknuti; static int pocitadlo = 0; MainFrame () { btnpocitadlo = new JButton("Zvyš stav počítadla"); add(btnpocitadlo); jlabelpocetstisknuti = new JLabel("Stav počítadla: 0"); btnpocitadlo.addactionlistener(new ActionListener() { public void actionperformed(actionevent e) { buttonpocitadloactionperformed(e); ); add(jlabelpocetstisknuti); private void buttonpocitadloactionperformed(actionevent e) { pocitadlo++; jlabelpocetstisknuti.settext("stav počítadla: " + pocitadlo);. Kód 7: Ukázka vytvoření obsluhy události Pojmy k zapamatování GUI, komponenta, událostmi řízené programování, událost, posluchač, obslužná metoda Otázky na procvičení 1. Jaké jsou základní rozdíly mezi konzolovou aplikací a aplikací s grafickým uživatelským rozhraním? 2. Jak funguje událostmi řízené programování? KST/IPOGR 1-8 Petr Veselý

3. Co je to komponenta? 4. Jaké jsou základní typy komponent? 5. Jakým způsobem se zobrazí hlavní okno aplikace? 6. Jak se vloží komponenty do kontejneru kontejnerové aplikace? 7. Jakým způsobem se řeší odezva na událost? 8. Co je to posluchač a jak se registruje? 9. Jaké jsou typy posluchačů? 10. Co je nutno nastavit v kódu, aby bylo možno aplikaci korektně ukončit? Odkazy a další studijní prameny http://owebu.bloger.cz/programovani/java-grafika-59-dil http://java.sun.com/docs/books/tutorial/2d/index.html http://www.linuxsoft.cz/article.php?id_article=244 Herout, P. Učebnice jazyka Java. České Budějovice : Koop, 2008. Herout, P. Java a grafické uživatelské prostředí. České Budějovice : Koop, 2007. KST/IPOGR 1-9 Petr Veselý