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

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

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

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

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ě (připomínka) Návrhář GUI Příklad aplikace MVC Model-View-Controller Události Vnitřní třídy. MVC Model-View-Controller

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

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

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.

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

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

Struktura třídy, operátory, jednoduché algoritmy, junit. Programování II 2. cvičení Alena Buchalcevová

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

2 Tvorba interaktivních grafických programů

8. GRAFICKÉ UŽIVATELSKÉ ROZHRANÍ

Konceptuální modelování

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

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

Knihovna QT4 a moºnosti jejího vyuºití

Vícevláknové aplikace modely a p íklady

Hiearchical MVC (Model-view-controller) vs. PAC (Presentation-abstraction-control)

P íklad t íd geometrických objekt a jejich vizualizace

Úvod, terminologie. Ing. Michal Valenta PhD. Databázové systémy BI-DBS ZS 2010/11, P edn. 1

3 Vývojová prostředí, základní prvky jazyka Java, konvence jazyka Java

Příklad aplikace Klient/Server s Boss/Worker modelem (informativní)

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

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

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

Skalární sou in. Úvod. Denice skalárního sou inu

Vícevláknové aplikace

Úvod. Katedra po íta. Ji í Vok ínek. P edná²ka 1 B6B36PJV Programování v JAVA. Fakulta elektrotechnická ƒeské vysoké u ení technické v Praze

C++ Akademie SH. 2. Prom nné, podmínky, cykly, funkce, rekurze, operátory. Michal Kvasni ka. 20. b ezna Za áte níci C++

Manuál uživatele čipové karty s certifikátem

Specifikace systému ESHOP

Uºivatelská p íru ka Octopus

Katedra obecné elektrotechniky Fakulta elektrotechniky a informatiky, VŠB - TU Ostrava 16. ZÁKLADY LOGICKÉHO ŘÍZENÍ

Jazyk C# (seminář 6)

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

PARADIGMATA PROGRAMOVÁNÍ 2A MAKRA I

Android Elizabeth. Verze: 1.3

1. Programování proti rozhraní

BRICSCAD V16. Modelování strojírenských sestav

Datové struktury. alg12 1

Objektov orientované programování

8. Grafické uživatelské rozhraní

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

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

Nastavení vestav ného p evodníku Ethernet -> sériová linka ES01

IP kamerový systém Catr - uºivatelský návod k obsluze

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

DeepBurner (testování UI)

Soubory a databáze. Soubor označuje množinu dat, která jsou kompletní k určitému zpracování a popisují vybrané vlastnosti reálných objektů

PARADIGMATA PROGRAMOVÁNÍ 2 KORUTINY, NEDETERMINISMUS

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

Algoritmizace a programování

Soft Computing (SFC) 2014/2015 Demonstrace u ení sít RCE, Java aplikace

WinCC V7.3. SIMATIC Logon. Siemens, s.r.o., Digital Factory 2015 Všechnapráva vyhrazena. Strana Ladislav Plachý / RC-CZ DF SUP

Dotazování nad stromem abstraktní syntaxe

MOBILNÍ KOMUNIKACE STRUKTURA GSM SÍTĚ

e²ení systém lineárních rovnic pomocí s ítací, dosazovací a srovnávací metody

RMI Remote Method Invocation

GUI. Systémová integrace pro desktopové aplikace

Transak ní zpracování I

Vícevláknové aplikace modely a příklady

IPCorder KNR-100 Instala ní p íru ka

SQL - úvod. Ing. Michal Valenta PhD. Databázové systémy BI-DBS ZS 2010/11, P edn. 6

KTE / ZPE Informační technologie

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

Abstraktní datové typy: zásobník

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

Obchodní podmínky pro spolupráci se společností Iweol EU s.r.o.

Vektory. Vektorové veli iny

ASYNCHRONNÍ STROJ. Trojfázové asynchronní stroje. n s = 60.f. Ing. M. Bešta

Objektově orientované databáze

Národního registru u ivatel léka sky indikovaných substitu ních látek (papírové hlá enky)

SPECIÁLNÍ PRAVIDLA SÓLOVÉ & PÁROVÉ BRUSLENÍ

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.

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

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

GIGAmatic. Tenzometrický přetěžovací převodník. 1. Popis Použití Technické informace Nastavení Popis funkce 6. 6.

Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.

Generické programování

1. Téma 12 - Textové soubory a výjimky

HLAVA III PODROBNOSTI O VEDENÍ ÚST EDNÍHO SEZNAMU OCHRANY P ÍRODY

JAVA JavaBeans Java, letní semestr

Předmět: Ročník: Vytvořil: Datum: ŠČERBOVÁ M. PAVELKA V. NOSNÍKY NOSNÍKY

Obrázek. Základní popis, zadání úkolu. Struktura tříd,

Stru ný obsah. Úvod do Microsoft.NET Kapitola 1: Vývoj her a ízený kód...15

Java a Caché IV: Manipulace s objekty

Část 1 Využití vláken v GUI. Vícevláknové aplikace modely a příklady. Část 2 Modely vícevláknových aplikací

Nástroje produktivity

SIMATIC WinCC/SES V7.3 (Sequence Execution System)

Úvod do programovacích jazyků (Java)

Datová centra, virtualizace a cloud computing

Návod pro vzdálené p ipojení do sít UP pomocí VPN pro MS Windows 7

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

Uºivatelská p íru ka k programu SlaFoR verze 1.0

Metodika kontroly naplněnosti pracovních míst

Operace nad celými tabulkami

Programování v Javě I. Leden 2008

Transkript:

GUI v Jav a událostmi ízené programování Ji í Vok ínek Katedra po íta Fakulta elektrotechnická ƒeské vysoké u ení technické v Praze P edná²ka 6 B6B36PJV Programování v JAVA Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 6: GUI v Jav a události 1 / 42

Obsah p edná²ky GUI v Jav (p ipomínka) Návrhá GUI P íklad aplikace MVC Model-View-Controller Události Vnit ní t ídy Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 6: GUI v Jav a události 2 / 42

Základní prvky grackého rozhraní Komponenty tla ítka, textová pole, menu, posuvníky,... Kontejnery komponenty, do kterých lze vkládat komponenty Nap íklad pro rozd lení plochy a volbu rozmíst ní Správce rozvrºení (Layout manager) rozmís uje komponenty v plo²e kontejneru Interakce s uºivatelem dále zpravidla vyºaduje mechanismus událostí a jejich zachytávání Swing Toolkit http://docs.oracle.com/javase/tutorial/uiswing Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 6: GUI v Jav a události 3 / 42

Základní komponenty Komponenty a dialogové prvky Tla ítka, text, textová pole, seznamy, p epína e javax.swing Kontejnery (v oknech, která zpravidla e²í prost edí OS) Komponenty obsahují komponenty javax.swing Komponenty musí být umíst ny v kontejneru Kontejnery se vkládají do oken JFrame obecný kontejner okno JPanel kontejner po jednoduché komponenty Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 6: GUI v Jav a události 4 / 42

Návrhá formulá Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 6: GUI v Jav a události 5 / 42

P íklad návrhu aplikace BarComp Na²ím cílem je vytvo it jednoduchou aplikaci s dv ma sadami tla ítek pro ovládání výpo tu s vizualizací postupu výpo tu a stavu aplikace. Aplikace má 4 základní komponenty 1. Hlavní ovládací tla ítka 2. Tla ítka pro nastavení 3. Progress bar 4. Stavový ádek Control buttons Buttons for parameters (fun) Computation visualization Status information Aplikaci pouºijeme pro demonstraci zpracování událostí a ukázku díl ích koncept. Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 6: GUI v Jav a události 6 / 42

P íklad návrhu aplikace BarComp Na²ím cílem je vytvo it jednoduchou aplikaci s dv ma sadami tla ítek pro ovládání výpo tu s vizualizací postupu výpo tu a stavu aplikace. Aplikace má 4 základní komponenty 1. Hlavní ovládací tla ítka 2. Tla ítka pro nastavení 3. Progress bar 4. Stavový ádek Control buttons Buttons for parameters (fun) Computation visualization Status information Aplikaci pouºijeme pro demonstraci zpracování událostí a ukázku díl ích koncept. Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 6: GUI v Jav a události 6 / 42

Struktura aplikace BarComp Aplikace se skládá z výpo etního modelu Model, grackých komponent MyBarPanel a spou²t cí t ídy DemoBarComp public class DemoBarComp { void start() {... public static void main(string[] args) { DemoBarComp demo = new DemoBarComp(); demo.start(); lec06/demobarcomp Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 6: GUI v Jav a události 7 / 42

Struktura aplikace BarComp Aplikace se skládá z výpo etního modelu Model, grackých komponent MyBarPanel a spou²t cí t ídy DemoBarComp public class DemoBarComp { void start() {... public static void main(string[] args) { DemoBarComp demo = new DemoBarComp(); demo.start(); lec06/demobarcomp Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 6: GUI v Jav a události 7 / 42

Struktura aplikace DemoBarComp start void start() { JFrame frame = new JFrame("PJV - lec06 - Demo Progress Bar of the Computation"); frame.setdefaultcloseoperation(jframe. EXIT_ON_CLOSE); frame.setminimumsize(new Dimension(480, 240)); MyBarPanel mybarpanel = new MyBarPanel(); frame.getcontentpane().add(mybarpanel); frame.pack(); frame.setvisible(true); mybarpanel.setcomputation(new Model()); lec06/demobarcomp Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 6: GUI v Jav a události 8 / 42

MyBarPanel základní struktura public class MyBarPanel extends JPanel { JTextField status; JProgressBar bar; Model computation; public MyBarPanel() { computation = null; createcomponents(); public void setcomputation(model computation) { this.computation = computation; private void createcomponents() {... lec06/mybarpanel Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 6: GUI v Jav a události 9 / 42

MyBarPanel createcomponents private void createcomponents() { // 1st row of the control buttons JPanel controlbuttonspanel = new JPanel(); createcontrolbuttons(controlbuttonspanel); // 2nd row of the buttons JPanel buttonspanel = new JPanel(); createbuttons(buttonspanel); // 3rd row with the progress bar bar = new JProgressBar(0, 100); // 0-100% JPanel progresspanel = new JPanel(); createprogress(progresspanel, bar); // 4th row with the status bar status = createstatusbar("waiting for your commands"); // Set layout and add the rows setlayout(new BoxLayout(this, BoxLayout.Y_AXIS)); add(controlbuttonspanel); add(buttonspanel); add(progresspanel); add(status); lec06/mybarpanel Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 6: GUI v Jav a události 10 / 42

MyBarPanel createcontrolbuttons private JPanel createcontrolbuttons(jpanel panel) { JButton btncompute = new JButton("Compute"); JButton btnstop = new JButton("Stop"); JButton btnquit = new JButton("Quit"); panel.add(btncompute); panel.add(btnstop); panel.add(btnquit); return panel; lec06/mybarpanel Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 6: GUI v Jav a události 11 / 42

MyBarPanel createbuttons private JPanel createcontrolbuttons(jpanel panel) { JButton btncompute = new JButton("Compute"); JButton btnstop = new JButton("Stop"); JButton btnquit = new JButton("Quit"); btnquit.addactionlistener(new ActionListener() { @Override public void actionperformed(actionevent e) { System.out.println("Force quit"); System.exit(0); ); panel.add(btncompute); panel.add(btnstop); panel.add(btnquit); return panel; lec06/mybarpanel Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 6: GUI v Jav a události 12 / 42

MyBarPanel createprogress private JPanel createprogress(jpanel panel, JProgressBar progress) { TitledBorder border = BorderFactory. createtitledborder("computations"); panel.setborder(border); panel.add(progress); return panel; lec06/mybarpanel Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 6: GUI v Jav a události 13 / 42

MyBarPanel createstatusbar private JTextField createstatusbar(string initmessage ) { JTextField statusbar = new JTextField(); statusbar.seteditable(false); statusbar.settext(initmessage); statusbar.sethorizontalalignment(jtextfield.left); statusbar.setmaximumsize( new Dimension( Integer.MAX_VALUE, statusbar.getpreferredsize().height )); return statusbar; lec06/mybarpanel Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 6: GUI v Jav a události 14 / 42

MyBarPanel gracké rozhraní Pro oºivení tla ítek musíme vytvo it reakce na události a propojit gracké rozhraní s modelem výpo etní ásti. Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 6: GUI v Jav a události 15 / 42

MyBarPanel gracké rozhraní Pro oºivení tla ítek musíme vytvo it reakce na události a propojit gracké rozhraní s modelem výpo etní ásti. Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 6: GUI v Jav a události 15 / 42

Model-View-Controller (MVC) Architektura pro návrh aplikace s uºivatelským rozhraním Rozd luje aplikaci na t i základní nezávislé komponenty Datový model aplikace Uºivatelské rozhraní ídicí logika Nezávislé ve smyslu, ºe zm na n které komponenty má minimální vliv na komponenty ostatní http://www.oracle.com/technetwork/articles/javase/index-142890.html youtube Elementary Model View Controller (MVC) by Example https://www.youtube.com/watch?v=libdze_djn4 Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 6: GUI v Jav a události 16 / 42

MVC Obecný princip Model datová reprezentace, se kterou aplikace pracuje View (pohled) zaji² uje vizualizaci dat aplikace do podoby vhodné k prezentaci Controller ( adi ) zaji² uje zm ny dat nebo vizualizace na základ událostí (typicky od uºivatele) Odd lení modelu od vizualizace je klí ové Umoº uje sdílení kódu a jeho snadnou údrºbu Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 6: GUI v Jav a události 17 / 42

MVC P íklad pr b hu 1. Uºivatel stiskne tla ítko v GUI 2. adi (controller) je informován o události 3. adi provede p íslu²nou akci a p istoupí k modelu, který modikuje 4. Model zpracuje poºadavek od adi e 5. Pohled (view) provede zobrazení aktualizovaného modelu Nap. pouºitím návrhového vzoru Observer nebo notikací od adi e. 6. Uºivatelské rozhraní eká na dal²í akci uºivatele Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 6: GUI v Jav a události 18 / 42

Zpracování událostí Událost je objekt, který vznikne zm nou stavu zdroje D sledek interakce uºivatele s ídicími elementy GUI Událost vznikne kliknutím na tla ítko stiskem klávesy posunem kurzoru (my²i) Události jsou produkovány tzv. producenty coº jsou tla ítka, rámy, gracké prvky Na události reagují poslucha i událostí coº jsou metody schopné zpracovat událost Poslucha i se registrují u producent pro odb r zpráv Java obsahuje promy²lený a konzistentní koncept vzniku a zpracování události Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 6: GUI v Jav a události 19 / 42

Sekven ní vs událostmi ízené programování Sekven ní programování kód je vykonáván postupn dle zadaného po adí Program za íná voláním main a pokra uje sekven n podle v tvení v ídicích strukturách (if, while,... ) Uºivatelský vstup blokuje aplikaci dokud není zadán Neumoº uje ekat na vstup z více zdroj (nap. klávesnice a my²i) Událostmi ízené programování (Event-driven programming) kód je vykonáván na základ aktivace n jakou událostí Systém eká na akci uºivatele Událost spou²tí odpovídající akci Událostmi ízené programování e²í Jak sou asn ekat na události z více zdroj Co d lat pro konkrétní událost Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 6: GUI v Jav a události 20 / 42

Event-driven programming základní koncept Základní koncept je postaven na front zpráv Opera ní systém spolu se správcem oken zpracovává vstupní události z p ipojených za ízení Pohyb my²í, stisk klávesy Správce oken identikuje p íslu²né okno a aplikace, které pat í událost a p epo²le ji do aplikace Aplikace (Swing) pouºívá podobný mechanismus pro identikaci, která komponenta obdrºí p íslu²nou zprávu Event queue Application Operating Application object System Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 6: GUI v Jav a události 21 / 42

Zpracování událostí koncepce Informace o události (zdroj události, poloha kurzoru, atd.) jsou shromáºd ny v objektu jehoº t ída ur uje charakter události: ActionEvent událost generovaná tla ítkem WindowEvent událost generovaná oknem MouseEvent událost generovaná my²í V²echny t ídy událostí jsou následovníky t ídy ActionEvent a jsou umíst ny v balíku java.awt.event. Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 6: GUI v Jav a události 22 / 42

Základní princip zpracování události Události jsou generovány zdroji událostí Jsou to objekty nesoucí informaci o události Události jsou p ijímány ke zpracování poslucha i událostí Objekty t íd s metodami schopnými událost zpracovat Zdroj události rozhoduje o tom, který poslucha má reagovat Registruje si svého poslucha e Producer Events Listener Registred listener Events processing Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 6: GUI v Jav a události 23 / 42

Model ²í ení událostí Události jsou p edávány poslucha m, které nejprve musí producent zaregistrovat Nap íklad addactionlistener(), addwindowlistener(), addmouselistener() Producent vysílá událost jen t m poslucha m, které si sám zaregistroval Poslucha musí implementovat n které z rozhraní poslucha (tj. schopnost naslouchat) ActionListener, WindowListener, MouseListener Zatímco událost producenta je typicky objekt n které knihovní t ídy (nap. tla ítka), poslucha je objekt, jehoº t ída je deklarována v aplikaci Registrace metodou add*?listener() Registrovaná t ída musí implementovat rozhraní *?Listener Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 6: GUI v Jav a události 24 / 42

P íklad poslucha e Registrujeme obsluhu události tla ítka #3 Vyuºijeme k tomu anonymní vnit ní t ídu (odvozenou od ActionListener) T ídu (objekt) poslucha e registrujeme metodou addactionlistener btn3.addactionlistener(new ActionListener() { ); @Override public void actionperformed(actionevent e) { btn3.settext("clicked"); Musíme implementovat v²echny metody abstraktní t ídy. S výhodou m ºeme vyuºít automatického generování vývojového prost edí. Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 6: GUI v Jav a události 25 / 42

P íklad poslucha e jako vnit ní t ídy public class MyBarPanel extends JPanel {... private class SimpleButtonListener implements ActionListener { final String msg; public SimpleButtonListener(String msg) { this.msg = msg; @Override public void actionperformed(actionevent e) { status.settext(msg);... Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 6: GUI v Jav a události 26 / 42

P íklad Instancí t ídy poslucha e m ºeme vytvo it více private JPanel createbuttons(jpanel panel) {... btn1.addactionlistener(new SimpleButtonListener( "Button #1 pressed")); btn2.addactionlistener(new SimpleButtonListener( "Button #2"));... Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 6: GUI v Jav a události 27 / 42

Implementace modelu událostí Poslucha události musí implementovat p íslu²né rozhraní Implementovat p íslu²né abstraktní metody rozhraní Pro kaºdý druh události je denována abstraktní metoda handler, která událost o²et uje actionperformed, mouseclicked, windowclosing,... Handlery jsou deklarovány v rozhraní poslucha i ActionListener, MouseListener, WindowListener,... P edání události poslucha i ve skute nosti znamená vyvolání innosti handleru, Objekt události je p edán jako skute ný parametr handleru Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 6: GUI v Jav a události 28 / 42

Registrace poslucha e Producent registruje poslucha e zavoláním registra ní metody: addactionlistener, addmouselistener, addwindowlistener,... Vazba mezi producentem a poslucha em je vztah N:M Jeden poslucha m ºe být registrován u více producent U jednoho producenta m ºe být registrováno více poslucha Událost se p edá v²em poslucha m, av²ak po adí zpracování není zaru eno Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 6: GUI v Jav a události 29 / 42

P íklad Poslucha m ºe mít sv j vlastní stav private class ToggleButtonListener implements ActionListener { final String msg; boolean state; public ToggleButtonListener(String msg) { this.msg = msg; state = false; @Override public void actionperformed(actionevent e) { state =!state; status.settext( msg + " " + (state? "On" : "Off") ); MVC? Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 6: GUI v Jav a události 30 / 42

P íklad Zdroj m ºe mít více poslucha... btn1.addactionlistener(new SimpleButtonListener( "Button #1 pressed")); btn2.addactionlistener(new ToggleButtonListener( "Button #2")); ButtonListener buttonlistener = new ButtonListener(); btn1.addactionlistener(buttonlistener); btn4.addactionlistener(buttonlistener);... Událost se p edá v²em poslucha m, po adí v²ak není zaru eno Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 6: GUI v Jav a události 31 / 42

P íklad Více zdroj téºe události a jeden poslucha private class ButtonListener implements ActionListener { int count = 0; @Override public void actionperformed(actionevent e) { count += 1; JButton btn = (JButton) e.getsource(); System.out.println("BtnLst: event: " + e); System.out.println("BtnLst e.getsource: " + e.getsource()); System.out.println("ActionCommand: " + e.getactioncommand()); status.settext("btnlst: received new event " + count + " from " + btn.gettext());... ButtonListener buttonlistener = new ButtonListener(); btn1.addactionlistener(buttonlistener); btn4.addactionlistener(buttonlistener);... Zdroj události m ºeme rozli²it podle textu nebo podle objektu (p etypování). Výhodn j²í je v²ak vytvo it individuální poslucha e. Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 6: GUI v Jav a události 32 / 42

Události my²i progress.addmouselistener(new MouseListener() { @Override public void mouseentered(mouseevent e) { border.settitle("mouse entred to the bar area"); panel.repaint(); // force update titledborder @Override public void mouseexited(mouseevent e) { border.settitle("computations"); panel.repaint(); // force update titledborder @Override public void mouseclicked(mouseevent e) { @Override public void mousepressed(mouseevent e) { @Override public void mousereleased(mouseevent e) { ); Události pohybu my²i lze naslouchat prost ednictvím rozhraní MouseMotionListener s vlastnostmi mousedragged a mousemoved Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 6: GUI v Jav a události 33 / 42

P íklad Aktualizace pr b hu výpo tu private void updateprogress() { if (computation!= null) { bar.setvalue(computation.getprogress()); private JPanel createbuttons(jpanel panel) { JButton btn1 = new JButton("#1");... btn1.addactionlistener(new ActionListener() { @Override public void actionperformed(actionevent e) { if (computation!= null) { computation.setvalue(10); updateprogress(); ); Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 6: GUI v Jav a události 34 / 42

P íklad Propojení na model a výpo et private class ComputeListener implements ActionListener { @Override public void actionperformed(actionevent e) { status.settext("start computation"); if (computation!= null) { // computation.compute(); computation.restartcomputation(); while (!computation.computepart()) { updateprogress(); updateprogress(); status.settext("computation done"); Pro nezávislý b h výpo tu a vizualizace pot ebujeme více vláknovou aplikaci. (PJV 7. p edná²ka) Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 6: GUI v Jav a události 35 / 42

P íklad Propojení na model a výpo et private class ComputeListener implements ActionListener { @Override public void actionperformed(actionevent e) { status.settext("start computation"); if (computation!= null) { // computation.compute(); computation.restartcomputation(); while (!computation.computepart()) { updateprogress(); updateprogress(); status.settext("computation done"); Pro nezávislý b h výpo tu a vizualizace pot ebujeme více vláknovou aplikaci. (PJV 7. p edná²ka) Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 6: GUI v Jav a události 35 / 42

Vnit ní t ídy Logické seskupení t íd, které se pouºívají jen v jednom konkrétním míst T ídy poslucha jsou vyuºitelné pro producenty v GUI Efektivita kódu Princip pomocné t ídy Princip zapouzd ení (t ída B je vnit ní t ídou vn j²í t ídy A) T ída B má p ístup ke v²em len m t ídy A, které v²ak mají být nep ístupné jiným t ídám (jsou deklarovány jako private) Je-li B vnit ní t ídou A, pak leny private t ídy jsou p ístupné i t íd B. T ída B je skryta mimo t ídu A Metody t ídy A nemají p ístup k prom nným a metodám t ídy B Zvý²ení itelnosti kódu a zlep²ení údrºby kódu http://docs.oracle.com/javase/tutorial/java/javaoo/nested.html Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 6: GUI v Jav a události 36 / 42

public class OutClass {... P íklad vnit ní t ídy private class InnerClass { final String msg; public InnerClass(String msg) { this.msg = msg;... Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 6: GUI v Jav a události 37 / 42

Vnit ní t ídy p ehled Prvkem t ídy m ºe být jiná t ída vno ená/vnit ní t ída T ída, která obsahuje vno enou t ídu vn j²í t ída Vnit ní t ída Statická vno ená t ída static Nem ºe p ímo p istupovat k instan ním len m vn j²í t ídy, musí vytvo it její instanci, p es ni má pak p ístup V podstat se chová jako b ºná statická t ída, jen p ístup je k ním p es jméno vn j²í t ídy Vnit ní t ída (bez static) Má p ístup ke v²em len m vn j²í t ídy v etn prvk private Má své vlastní prom nné a metody Nemá statické leny Vn j²í t ída m ºe do vnit ní jen p es její instanci Vnit ní t ída není p ístupná vn denice vn j²í t ídy, jen v rámci vn j²í t ídy Pokud nepot ebujeme jméno vnit ní t ídy, m ºeme pouºít anonymní vnit ní t ídu. Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 6: GUI v Jav a události 38 / 42

P íklad anonymní vnit ní t ídy btn3.addactionlistener(new ActionListener() { @Override public void actionperformed(actionevent e) { btn3.settext("clicked"); ); Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 6: GUI v Jav a události 39 / 42

Final vs. eectively nal Vno ená/vnit ní t ída m ºe p istupovat pouze na final prom nné vn j²í t ídy final prom nná je taková, která se po p i azení jiº nem ní Java 8 p iná²í tzv. eectively nal prom nné, tzn. automaticky povaºuje prom nné, které se v programu nem ní za final Nemusíme je tedy explicitn deklarovat klí ovým slovem final, ale p i zm n obsahu dostaneme chybu. Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 6: GUI v Jav a události 40 / 42

Diskutovaná témata Shrnutí p edná²ky Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 6: GUI v Jav a události 41 / 42

Diskutovaná témata Diskutovaná témata GUI v Jav návrhá a programov denované gracké rozhraní Model-View-Controller Event-Driven Programming Události v Jav (Swing) Vnit ní t ída a anonymní t ída Model-Pohled- adi Událostmi ízené programování P í²t : Vlákna Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 6: GUI v Jav a události 42 / 42

Diskutovaná témata Diskutovaná témata GUI v Jav návrhá a programov denované gracké rozhraní Model-View-Controller Event-Driven Programming Události v Jav (Swing) Vnit ní t ída a anonymní t ída Model-Pohled- adi Událostmi ízené programování P í²t : Vlákna Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 6: GUI v Jav a události 42 / 42