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

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

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í

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í

2 Tvorba interaktivních grafických programů

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.

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

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

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

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

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

8. GRAFICKÉ UŽIVATELSKÉ ROZHRANÍ

8. Grafické uživatelské rozhraní

1. Programování proti rozhraní

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

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

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

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

Generické programování

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

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

Seznámení s AWT: práce s okny, grafikou a textem

Jazyk C# (seminář 6)

Výčtový typ strana 67

Programování v C++ 2, 4. cvičení

Práce se soubory v Javě

Seminář Java IV p.1/38

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

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

Jazyk C# (seminář 3)

State. Známý jako. Účel. Použitelnost. Stav, Object for States. umožňuje objektu měnit svoje chování v závislosti na stavu objekt mění svou třídu

Výchozí a statické metody rozhraní. Tomáš Pitner, upravil Marek Šabo

1. Dědičnost a polymorfismus

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

JAVA JavaBeans Java, letní semestr

Abstraktní třída a rozhraní

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

Programování v C++ 3, 3. cvičení

Datové struktury. alg12 1

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

typová konverze typová inference

Java - řazení objektů

3. Je defenzivní programování technikou skrývání implementace? Vyberte jednu z nabízených možností: Pravda Nepravda

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

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.

PŘÍLOHY SEZNAM PŘÍLOH:

Základy objektové orientace I. Únor 2010

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

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

Chain of responsibility

Iterator & for cyklus

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

RMI Remote Method Invocation

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

Abstraktní datové typy: zásobník

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.

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

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

Úvod do programovacích jazyků (Java)

Algoritmizace a programování

Parametrizované třídy Generics generické třídy. JDK zavádí mimo jiné tzv. parametrizované třídy - generics

Java Výjimky Java, zimní semestr

GUI. Systémová integrace pro desktopové aplikace

Lambda funkce Novinky v interfaces Streamy Optional - aneb zbavujeme se null. Java 8. Ondřej Hrstka

20. Projekt Domácí mediotéka

PREPROCESOR POKRAČOVÁNÍ

Dědění, polymorfismus

Dynamicky vázané metody. Pozdní vazba, virtuální metody

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

Remote Method Invocation RMI

Úvod Třídy Rozhraní Pole Konec. Programování v C# Hodnotové datové typy, řídící struktury. Petr Vaněček 1 / 39

Rozhraní SAX, SAX vs. SAX2. Jaroslav Ciml

Programovací jazyk Java

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

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

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

RMI - Distribuované objekty v Javě

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

9. Polymorfismus a rozhraní

Vyřešené teoretické otázky do OOP ( )

Grafické uživatelské rozhraní GUI event-driven programming událostmi řízené programování

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

3. Třídy. Základní pojmy objektového programování. Třídy

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.

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

Soubor jako posloupnost bytů

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

KTE / ZPE Informační technologie

Využití OOP v praxi -- Knihovna PHP -- Interval.cz

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

Programování II. Modularita 2017/18

Mediator motivace. FontDialog. závislosti mezi jednotlivými ovládacími prvky jsou netriviální

JavaScript 101. "Trocha života do statických stránek"

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

Více o konstruktorech a destruktorech

4. ZÁKLADNÍ POJMY Z OBJEKTOVĚ ORIENTOVANÉHO PROGRAMOVÁNÍ

Transkript:

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

Zpracování událostí - obsah 1. Připomenutí GUI 2. Co to je událost 3. Koncepce zpracování událostí 4. Zpracování vlastností události 5. Zpracování události od více zdrojů 1. Rozlišení typem 2. Rozlišení popisem 6. Dva posluchači téhož zdroje 7. Vnitřní třídy 8. Anonymní třídy 9. Příklad na myšku 2

Zpracování událostí Mechanismus, který umožní zpracovávat vstupní informace programu, předávané nejčastěji přes GUI Zpracování vstupní informace v GUI je realizováno: vysláním události na jedné straně producentem zachycením této události posluchačem Pojmy: Producentem události je třída (GUI), systém Událostí je objekt této třídy (prvek GUI), systém Posluchačem je objekt naší třídy, kterou to naučíme 3

Zpracování událostí Grafické uživatelské rozhraní Řešení reakce na událost stisk tlačítka DemoGUI 4

Zpracování událostí Událost je objekt, který vznikne změnou stavu zdroje důsledek interakce uživatele s řídícími grafickými elementy GUI Událost vznikne: kliknutím na tlačítko stiskem klávesy posunem kurzoru, atd. Události jsou produkovány tzv. producenty což jsou: tlačítka rámy grafické prvky Java - promyšlený a konzistentní koncept vzniku a zpracování událostí 5

Příklad zdrojů událostí 6

Zpracování událostí událost Zpracování události 7

Model šíření událostí - schéma Události producenta Producent událostí Posluchač událostí Registrace posluchačů Zpracování událostí 8

Zpracování událostí - koncepce Informace o jedné události (zdroj události, poloha kurzoru, atd.) jsou shromážděny v objektu, jehož třída určuje charakter události, např.: ActionEvent ~ událost generovaná tlačítkem WindowEvent MouseEvent ~ událost generovaná oknem ~ událost generovaná myší Všechny třídy událostí jsou následníky třídy event a jsou umístěny v java.awt.event.*; Základní princip zpracování událostí: Události jsou generovány zdroji událostí (jsou to objekty, které nesou informaci o události) Události jsou přijímány ke zpracování posluchači událostí (to jsou opět 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) 9

Model šíření událostí 1. Události jsou předávány posluchačům, které si nejprve musí producent zaregistrovat např. metodami: addactionlistener(), addwindowlistener(), addmouselistener() Producent vysílá jen těm posluchačům, které si sám zaregistroval 2. Posluchač musí implementovat některý z posluchačských rozhraní (!) (schopnost naslouchat): ActionListener, WindowListener, MouseListener, Zatímco událost producenta je typicky objekt některé knihovní třídy ( od tlačítka ), posluchač je objekt, jehož třída je deklarována v aplikaci. Slovy Javy : zdroj událostí producent (potomek třídy java.awt.awtevent): zaregistruje si jednu či více tříd svou metodou addxxxlistener() zaregistrovaná třída musí implementovat rozhraní XXXListener() Analogie (Herout): velitel (producent) si musí zaregistrovat své vojáky (posluchače), kteří mají schopnost či kvalifikaci poslouchat (implementují rozhraní) vojáci (posluchači) si nevybírají své velitele (producenty) 10

Zpracování události, posluchač mimo class Okno extends JFrame{ public Okno (){ FlowLayout srb = new FlowLayout(); kon.setlayout(srb); JButton atlac = new JButton("Před stiskem"); kon.add(atlac); atlac.addactionlistener(new Posluchac0()); setcontentpane(kon); // registrace posluchače class Posluchac0 implements ActionListener {// posluchač public void actionperformed(actionevent e) { JButton o=(jbutton)e.getsource();//určen objekt události o.setlabel( Po stisku"); //reakce na udalost 11

Schematický příklad zpracování události, výsledek 12

Implementace modelu událostí Posluchač události musí implementovat příslušné rozhraní (interface), tj. implementovat příslušné abstraktní metody rozhraní Pro každý druh události je definována abstraktní metoda (handler), která tuto událost ošetřuje actionperformed, mouseclicked, windowclosing, atd. Handlery jsou deklarovány v rozhraních - posluchači: ActionListener, MouseListener, WindowListener, atd. 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. Producent registruje posluchače zavoláním registrační metody: addactionlistener, addmouselistener, addwindowlistener, atd. 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. 13

Zpracování posloupnosti, posluchač součástí class Okno1 extends JFrame implements ActionListener { JLabel napisx; // třída sama vysílá i zpracovává události JButton atlac; Container kon; public Okno1 (){ [ ]. kon.setlayout(srb); atlac = new JButton( Změň"); kon.add(atlac); napisx = new JLabel("NÁPIS"); kon.add(napisx); atlac.addactionlistener(this); setcontentpane(kon); public void actionperformed(actionevent e) { //implementace napisx.settext("jiny"); Poznámka: Třída Udalosti1 je producentem i posluchačem!! 14

Funkcionalita zpracování události, výsledek 15

Zpracování vlastností události, rozlišení objektem class Okno2 extends JFrame{ // rozeznání události podle objektu public Okno2 (){ kon.setlayout(srb); JButton atlac = new JButton("Před stiskem"); kon.add(atlac); atlac.addactionlistener(new Posluchac2()); setcontentpane(kon); public void actionperformed(actionevent e) { JButton o = (JButton) e.getsource(); if (!i) { o.settext("po lichém stisku"); i =!i; else { o.settext("po sudém stisku"); i =!i; 16

Zpracování vlastností události Nebyla tam chyba?? 17

Více zdrojů téže události, jeden posluchač class Okno3 extends Okno1 { // potomek!!! JButton bbtlac; Okno3() { bbtlac = new JButton("Druhé"); kon.add(bbtlac); bbtlac.addactionlistener(this); // zkusit jinak setcontentpane(kon); public void actionperformed(actionevent){ napisx.settext("jiny"); 18

Rozlišení stejných událostí popisem class Okno4 extends Okno3 { JLabel lab; Okno4() { lab = new JLabel("Nazdar"); kon.add(lab); // bbtlac.addactionlistener(this); setcontentpane(kon); public void actionperformed(actionevent e) { String s = e.getactioncommand(); String napis = (s.equals(atlac.getlabel()))?"prvni":"druhe"; lab.settext(napis); 19

Rozlišení stejných událostí objektem zdroje class Okno5 extends Okno3 { JLabel lab; Okno5() { lab = new JLabel("Nazdar"); kon.add(lab); // bbtlac.addactionlistener(this); setcontentpane(kon); public void actionperformed(actionevent e) { Object o = e.getsource(); String napis = (o.equals(atlac))? "PRVNI!":"DRUHE!"; lab.settext(napis); 20

Různí posluchači jednoho producenta class Okno10 extends Okno1{ Okno10() { atlac.addactionlistener(new Posluchacx2()); setcontentpane(kon); class Posluchacx2 implements ActionListener { public void actionperformed(actionevent e) { System.out.print("Pípnuto"); Toolkit.getDefaultToolkit().beep(); Pípnuto 21

Události myši implements MouseListener { public void mouseclicked(mouseevent me) { public void mouseentered(mouseevent me) { public void mouseexited(mouseevent me) { public void mousepressed(mouseevent me) { public void mousereleased(mouseevent me) { implements MouseMotionListener { public void mousedragged(mouseevent me) { public void mousemoved(mouseevent me) { 22

Vnitřní třídy Logické seskupení tříd, které se používají jen v jednom místě typicky - 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) Situace: Třída B má přístup ke všem členům třídy A, ale které mají být nepřístupny jiným třídám (private) Je-li B vnitřní třídou třídy A, pak členy private třídy A 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 jeho lepší údržbu Kód použité třídy je blíže svému použití 23

Vnitřní třídy Vnější třída Vnitřní třída 24

Vnitřní třídy Prvkem třídy může být jiná třída vnořená třída Třída, která obsahuje vnořenou třídu vnější třída Vnořená 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 Nepoužívají se Vnitřní třída bez static Má přístup ke všem členům vnější třídy, bez vytvoření instance, i k prvkům 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ě definice vnější třídy, jen v rámci vnější třídy! Když nás nezajímá jméno vnitřní třídy, můžeme použít anonymní vnitřní třídu 25

Vnitřní třídy v událostech class Okno6 extends Okno3 { JLabel lab1; class Udalost implements ActionListener{ String vypis; public Udalost(String vypis) { this.vypis = vypis; public void actionperformed(actionevent e) { lab1.settext(vypis); Udalost ahojud, nazdarud; Okno6() { lab1 = new JLabel("Nazdar6"); kon.add(lab1); aud = new Udalost("AHOJ"); atlac.addactionlistener(aud); nud = new Udalost("NAZDAR"); bbtlac.addactionlistener(nud); vnitřní třída 26

Vnitřní třídy v událostech 27

Použití více vnitřních tříd - doporučený způsob public Okno7() { JButton atlac = new JButton("Ahoj"); kon.add(atlac); atlac.addactionlistener(new AhojBTAL()); JButton bbtlac = new JButton("Nazdar"); kon.add(bbtlac); bbtlac.addactionlistener(new NazdarBTAL()); lab = new JLabel("Nazdar"); kon.add(lab); setcontentpane(kon); class AhojBTAL implements ActionListener { public void actionperformed(actionevent e) { lab.settext("ahoj"); class NazdarBTAL implements ActionListener { public void actionperformed(actionevent e) { lab.settext("nazdar"); Vnitřní třída Vnitřní třída 28

Použití více vnitřních tříd 29

Anonymní vnitřní třídy public Okno8() Vnitřní anonymní třída JButton atlac = new JButton("Ahoj"); kon.add(atlac); atlac.addactionlistener(new ActionListener() { public void actionperformed(actionevent e) { lab.settext("ahoj"); ); JButton bbtlac = new JButton("Nazdar"); kon.add(bbtlac); bbtlac.addactionlistener(new ActionListener() { public void actionperformed(actionevent e) { lab.settext("nazdar"); ); lab = new JLabel("Nazdar"); kon.add(lab); setcontentpane(kon); Vnitřní anonymní třída 30

Anonymní vnitřní třídy 31

Další možnosti Zrušení posluchače už nechceme reakce removeactionlistener(actionlistener posluchac) Programové vyvolání události vyvolání události jinak než tlačítkem Více metod rozhraní posluchače např. u událostí myši nutnost implementovat všechny metody rozhraní!! možnost použití tzv. adaptérů (java.awt.event.windowadapter) Implementace rozhraní s prázdnými metodami, uživatel není nucen všechny metody rozhraní implementovat Ke studiu 32

33