Události ( Events ) GUI definuje model událostí ( event model ) – od Javy 1.1 je to tzv. delegační model. ( Původní tzv. hierarchický model se již neužívá.

Slides:



Advertisements
Podobné prezentace
(instance konkrétní třídy)
Advertisements

Špička v každém směru IT 3 Produktivita práce s Eclipse.
Ať se postará někdo jiný, najmeme si programátory z Číny. Čuníkům vstup zakázán.
BLIŽŠÍ POHLED NA TŘÍDY, DĚDIČNOST - úvod
Uživatelská rozhraní Uživatelská rozhraní 9. cvičení.
PJV151 Vnořené a vnitřní členy mohou být členy tříd a interfejsů. Je-li X obalem Y a Y je obalem Z, pak Z získá jméno X$Y$Z - kompilací vzniknou classy.
Polymorfismus Dědičnost
Mobilní aplikace na sledování odpracovaného času
● SWIG - Simplified Wrapper and Interface Generator ● + google a diskusní fóra ● nástroj zjednodušující (a sjednocující)
Čtvrté cvičení Objektové programování Objektový model v Javě
Objekty v CLIPSu RNDr. Jiří Dvořák, CSc.
Chain of responsibility Martin Malý prezentace na předmět Návrhové vzory (PRG024) na MFF UK
State. State – kontext a problém Kontext  chování objektu má záviset na jeho stavu, který se typicky mění za běhu Neflexibilní řešení  metody obsahují.
Páté cvičení Dědičnost Interface Abstarktní třídy a metody
Adapter. Adapter – pojem Součástka navržená k propojení dvou „nekompatibilních“ zařízení Definice slova podle Cambridge Advanced Learner's Dictionary:
Objektové orientované programování Objektově orientované problémy v PHP Lukáš Masopust 2008.
Objektové programování
Rozšíření jednouživatelské verze IS na víceuživatelskou Prezentace Diplomové práce Autor : Libor Tomášek Spoluautoři : Pobucký M., Drábek L. Vedoucí :
Jedenácté cvičení Vlákna. Java cv112 Vlákna Operační systém Mutitasking – více úloh se v operačním programu vykonává „současně“ Java Multithreading -
08/04/20151 Delegáty (1) Delegát (delegate) je datový typ, který definuje signaturu metody Delegáty bývají rovněž označovány jako typo- vě bezpečné ukazatele.
Strategy. Strategy – „All-in-1“ na začátek class AStrategy { public: virtual void Algorithm()=0; protected: AStrategy(); }; class SpecificStrategy: public.
ActionScript Moderní počítačové aplikace. Charakteristika Je odvozen od JavaScriptu Integruje do Flashe interaktivní ovládání Umožňuje vytvořit přehledné.
Seminář C++ 4. cvičení Objekty Ing. Jan Mikulka. Co je objekt ► obraz třídy i instance ► třída – definovaná za pomocí klíčového slova class ► instance.
Composite [kompozit, ne kompozajt]. Composite Výslovnost  kompozit, ne kompozajt Účel  Popisuje, jak postavit hierarchii tříd složenou ze dvou druhů.
Uživatelská rozhraní Uživatelská rozhraní 6. cvičení.
Memento. Obnovení operačního systému ( Windows | Linux...) Všichni víme, co jsou transekce v databázi Memento – zálohování databáze.
KIV/PPA1 cvičení 8 Cvičící: Pavel Bžoch. Osnova cvičení Objekty v Javě Třída Konstruktor Metody Metody a proměnné třídy x instance Program sestávající.
OSNOVA: a) Úvod do OOPb) Třídy bez metod c) Třídy s metodamid) Konstruktory a destruktory e) Metody constf) Knihovní třídy g) Třídy ve tříděh) Přetížení.
Návrhový vzor Factory v JAVA API Martin Kot Katedra informatiky VŠB – Technická univerzita Ostrava
PB161 Principy OOP - rozhraní, dědičnost PB161 | Principy OOP - Dědičnost, rozhraní
C# - předávání parametrů Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
IB111 Programování a algoritmizace
Návrh a tvorba WWW Přednáška 5 Úvod do jazyka PHP.
Dědičnost - inheritance dědičnost je jednou z forem znovupoužitelnosti dědičnost je jednou z forem znovupoužitelnosti B A Třída A je předkem třídy B Třída.
Richard Lipka Department of Computer Science and Engineering Faculty of Applied Sciences University of West Bohemia, Pilsen, Czech Republic 1.
Šesté cvičení Výjimky Balíky.
Principy OOP Objektově orientované programování vychá-zí ze třech základních principů (rysů): zapouzdření (encapsulation) dědičnost (inheritance) polymorfismus.
PJV031 Přetypování (casting) Objekty, atributy, lokální proměnné, parametry a návratové hodnoty metod mají definovaný, neměnný typ. Jsou dva druhy typů:
Decorator. Rozšiřuje objekty o dodatečné chování  rozšiřuje konkrétní objekty, ne třídy  rozšiřuje objekt dynamicky, tj. za běhu Upřednostňuje kompozici.
Abstract Factory. Abstract Factory – úvod Situace  potřebujeme vytvářet objekty ze skupiny souvisejících nebo na sobě závislých tříd  2 „druhy“ GUI.
Akademie ZENU Ukázková aplikace. Tak o tomhle to nebude…
Kam se ubírá jazyk C#? Dr. Ing. Dalibor Kačmář Academic Developer Evangelist Developer & Platform Evangelist Group Microsoft Czech & Slovakia Anders Hejlsberg.
Kreslítko Petr Diviš Zdeněk Papež. Úvod - připomenutí Desktopová („stand-alone“) aplikace Jednoduchý grafický editor  Tvorba a editace základních geometrických.
Observer Martin Dráb Návrhové vzory, Co to je?  Definuje závislost 1:N mezi objekty  Závislé objekty jsou informovány o změně stavu  Konzistentní.
Strategy. Motivace Různé algoritmy pro stejnou akci Hromada kódu v mnoha podmínkách Důsledky  Komplexnost  Špatná čitelnost  Těžká správa kódu  Těžka.
Proxy. Popis  Klient má přístup k nějakému objektu  Potřebujeme tento přístup ošetřit, aniž bychom přidělali klientovi práci Kontrola přístupu Vzdálený.
JavaScript úvod. Jazyky webového vývojáře Dynamická stránka  aktivně mění svůj obsah v reakci na činnost uživatele  zpracování na straně serveru (PHP,
Composite “ Spojuj a panuj ”. Zakladní vlastnosti Výslovnost  kompozit, ne kompozajt Účel  Popisuje, jak postavit strukturované hierarchie tříd, v níž.
Praha & EU: Investujeme do vaší budoucnosti Evropský sociální fond Gymnázium, Praha 10, Voděradská 2 Projekt OBZORY GUI v Javě úvod.
PJV08 1 GUI (Graphical User Interface)‏ Vizuální a interaktivní komunikaci počítač-člověk podporují balíčky: java.awt - obsahuje: - komponenty: knoflíky,
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně AUTOR: Ing. Adéla Tomalová NÁZEV: Podpora výuky v technických oborech TEMA: Objektově orientované.
PJV15 1 Vnořené ( nested ) a vnitřní ( inner ) členy Třídy či interfejsy mohou být členy tříd či interfejsů. Je-li X obalem Y a Y obalem Z, pak Z získá.
PJV26 1 JavaBeans je technologie výroby znovupoužitelných, na platformě nezávislých komponent. Podporována je od jdk 1.1 a BDK. Bean lze vizuálně vkládat.
Pattern Oriented Software Architecture
OOP - Objektově Orientované Programování
Generické typy jsou třídy či interfejsy deklarující tzv. typové parametry jimiž: systematizují typovou kontrolu kompilátorem, vyjadřují jasněji smysl,
Návrhový vzor Flyweight
Abstract Factory.
Polymorfismus = Mnohotvarost
Strategy „Definujte rodinu algoritmů, zapouzdřuje je aby byly vzájemně zaměnitelné. Strategie umožňuje, aby se algoritmus nebyl závislý na klientech, kteří.
RMI = Remote Method Invocation
Swing je součást JFC Je to vylepšené GUI funkčně, esteticky i ergonomicky ( nazvaný náhodně větou: "Swing dancing is getting to be really big." - v San.
Bridge.
Reflexe jako introspekce
Programování v prostředí Borland Delphi
C# přehled vlastností.
Výčtové typy ( Java 5 ) Výčtové typy jsou speciální třídy zavedené pro větší bezpečí a pohodlí. V nejjednodušší variantě se definují příkladmo takto:
Adapter
Composite “Spojuj a panuj”.
Bridge.
Transkript prezentace:

Události ( Events ) GUI definuje model událostí ( event model ) – od Javy 1.1 je to tzv. delegační model. ( Původní tzv. hierarchický model se již neužívá. ) Událost je objekt jenž popisuje jev a poskytuje metody k obsluze. Zdroj události ( např. komponenta ) je objekt, který generuje události ( i více typů ) - např. Button po stisku či Frame při pohybu myši - a rozesílá je registrovaným handlerům. Zdroj handlery registruje ve svých dynamických seznamech. Události posílá zdroj tak, že zavolá patřičnou metodu handleru s parametrem odkazujícím na událost. Handler je objekt ( vytvořený programátorem ), který událost přijme a zpracuje. Aby ji dokázal přijmout, musí implementovat jeden či více tzv. listenerů ( tj. posluchačů ) specifických typů. Listener je specifický interfejs pro každý typ události. Tentýž objekt může být současně zdrojem i handlerem. PJV09

Registrace a rozesílání hx = handler for XXX addXXXListener( XXXlistener li ) sx = XXXEvent source method( XXXEvent ev ) XXXListener hxy = method( XXXEvent ev ) ev =new XXXEvent( ); handler for XXX , YYY sy = YYYEvent source YYYListener hy = handler for YYY seznam handlerů registrace rozesílání ( broadcast ) implements PJV09

Zdroje a handlery class HX implements XXXListener { ... /* konkrétní požadované metody */ } class HY implements YYYListener { ... /* konkrétní požadované metody */ } class HXY implements XXXListener, YYYListener { ... /* konkrétní požadované metody */ } HX hx = new HX( ); /* konstrukce handlerů HY hy = new HY( ); HXY hxy = new HXY( ); ... sx.addXXXListener( hx ); /* registrace handlerů h u zdrojů s */ sx.addXXXListener( hxy ); sy.addYYYListener( hxy ); sy.addYYYListener( hy ); PJV09

java.awt.event AWT Event Input Event Event Hierarchy Event Invocation java.util java.io java.awt EventObject Serializable ActiveEvent javax.swing.event InputMethod Event Hierarchy Event Invocation Event Internal FrameEvent Ancestor Event java.awt AWT Event Component Event Action Event Adjustment Event Item Event Text Event Input Event Container Event Window Event Focus Event Paint Event Mouse Event Key Event MenuKey Event ***Listener ***Listener ***Listener all except AWTEventListener java.awt Mouse WheelEvent MenuDrag MouseEvent AWTEvent Multicaster PJV09

Listenery a adaptery Action Adapter Adapter Focus Adapter Key Adapter java.util java.beans EventListener PropertyChange Listener InputMethod Listener Hierarchy Listener 1 1 Action Listener Adjustment Listener Item Listener Text Listener HierarchyBounds Listener 1 1 1 1 2 javax.swing Action Hierarchy Bounds Adapter 6 MouseMotion Listener Mouse Listener MouseWheel Listener Focus Listener Key Listener 2 5 1 2 3 MouseMotion Adapter Mouse Adapter Focus Adapter Key Adapter 2 8 2 3 WindowState Listener Window Listener Component Listener Container Listener AWTEvent Listener 1 7 4 2 1 Window Adapter Component Adapter Container Adapter AWTEvent ListenerProxy WindowFocus Listener 2 10 4 2 PJV09 -- Functional Interface

* dědí ActionListener ale negeneruje na ActionEvent Zdroje událostí * dědí ActionListener ale negeneruje na ActionEvent PJV09

Metody listenerů ActionListener - Button, List, TextField, MenuItem, CheckboxMenuItem  actionPerformed ( ActionEvent e ) AdjustmentListener - Scrollbar adjustmentValueChanged ( AdjustmentEvent e ) AWTEventListener eventDispatched ( AWTEvent e ) ComponentListener - všechny třídy ( mimo MenuItem a potomků ) componentHidden ( ComponentEvent e ) componentMoved ( ComponentEvent e ) componentResized ( ComponentEvent e ) componentShown ( ComponentEvent e ) ContainerListener - Container a potomci componentAdded ( ContainerEvent e ) componentRemoved ( ContainerEvent e ) FocusListener - všechny třídy ( mimo MenuItem a potomků ) focusGained ( FocusEvent e ) focusLost ( FocusEvent e ) PJV09

Metody listenerů HierarchyBoundsListener ancestorMoved ( HierarchyEvent e ) ancestorResized ( HierarchyEvent e ) HierarchyListener hierarchyChanged ( HierarchyEvent e ) InputMethodListener – pro znaková písma caretPositionChanged ( InputMethodEvent e ) inputMethodTextChanged ( InputMethodEvent e ) ItemListener – Checkbox, CheckboxMenuItem, Choice, List itemStateChanged ( ItemEvent e ) KeyListener - všechny třídy ( mimo MenuItem a potomků ) keyPressed ( KeyEvent e ) keyReleased ( KeyEvent e ) keyTyped ( KeyEvent e ) PJV09

Metody listenerů MouseListener - všechny třídy ( mimo MenuItem a potomků ) mouseClicked ( MouseEvent e ) mouseEntered ( MouseEvent e ) mouseExited ( MouseEvent e ) mousePressed ( MouseEvent e ) mouseReleased ( MouseEvent e ) MouseMotionListener - všechny třídy ( mimo MenuItem a potomků ) mouseDragged ( MouseEvent e ) mouseMoved ( MouseEvent e ) TextListener – TextComponent, TextArea a TextField textValueChanged ( TextEvent e ) PJV09

Metody listenerů WindowFocusListener windowGainedFocus ( WindowEvent e ) windowLostFocus ( WindowEvent e ) WindowListener – Window a potomci windowActivated ( WindowEvent e ) windowClosed ( WindowEvent e ) – po uzavření windowClosing ( WindowEvent e ) – pro zavření windowDeactivated ( WindowEvent e ) windowDeiconified ( WindowEvent e ) – zvětšení z ikony windowIconified ( WindowEvent e ) – zmenšení do ikony windowOpened ( WindowEvent e ) WindowStateListener windowStateChanged ( WindowEvent e ) PJV09

Listening class MyFrame extends Frame implements ActionListener, ItemListener { // this instance is the handler Button b = new Button( “OK” ); Checkbox c = new Checkbox( ); public MyFrame( ) { add( b ); add( c ); b.addActionListener( this ); c.addItemListener( this ); ... } @Override public void actionPerformed( ActionEvent e ) { ... } @Override public void itemStateChanged( ItemEvent e ) { ... } PJV09

Adaptery jsou abstraktní třídy implementující interfejsy ( např. listenery ) pouze konkrétními avšak prázdnými metodami. Potomek adapteru je již konkrétní třída mající potřebné metody překryté neprázdnými. To je výhodné při implementaci listenerů definujících více metod – ač chceme využít jen některé z nich. K zavření okna ( Window, Dialog, Frame ) stačí metoda windowClosing( ), jež je jedna ze sedmi ve WindowListeneru - ostatních šest by bylo nutno definovat alespoň jako prázdné. Adapter umožňuje přepsat jen tuto. Zavření okna nemusí znamenat ukončení aplikace. Tu je třeba případně ukončit např. pomocí System.exit(0) Zdroje lze uvolnit metodou dispose(). PJV09

Ukončení aplikace public class MyFrame extends Frame { public MyFrame( ) { this.addWindowListener( new WindowAdapter( ) { // Handler as anonymous inner class @Override public void windowClosing( WindowEvent e ) { System.exit( 0 ); } ); ... objekt anonymní třídy PJV09

Ukončení aplikace public class MyFrame extends Frame { public MyFrame( ) { ... this.addWindowListener( new Closer( ) ); // creation and registration } class Closer extends WindowAdapter { // handler public void windowClosing( WindowEvent e ) { System.exit( 0 ); PJV09

Poloha myši public class Test extends Frame { public Point p; public Test( ) { this.addMouseMotionListener( // registration new Test_this_mouseMotionAdapter( this ) // create handler ); } void this_mouseMoved( MouseEvent e ) { p = e.getPoint( ); class Test_this_mouseMotionAdapter extends MouseMotionAdapter { Test adaptee; Test_this_mouseMotionAdapter( Test adaptee ) { this.adaptee = adaptee;} public void mouseMoved( MouseEvent e ) { // overriding method adaptee.this_mouseMoved( e ); // event receipt PJV09

Vytvoření anonymních tříd java.lang java.lang java.util Object Object EventListener XXX Adapter anonymous XXXListener anonymous pomocí adapteru: new XXXAdapter( ) { ... } pomocí listeneru: new XXXListener( ) { ... } PJV09

Focus Fokus čili ohnisko určuje komponentu ke které mají směřovat akce a zprávy ze zdroje, který to sám neurčuje – tj. např. z klávesnice. FocusListener i FocusAdapter obsahují dvě metody: focusGained( FocusEvent e ) a focusLost( FocusEvent e ) umožňující komponentě zjistit zda je v ohnisku. Třída Component definuje metody: public boolean isFocusOwner( ) public void setFocusable( boolean focusable ) protected void processFocusEvent( FocusEvent e ) PJV09

Posunovatelná komponenta class MovableComponent extends ..… { // … component Point loc, p ; this.addMouseListener( new MouseAdapter( ) { @Override void mousePressed( MouseEvent ev ) { p = ev.getPoint( ); // mouse position in component loc = getLocation( ); // component position in container } this.addMouseMotionListener( new MouseAdapter( ) { @Override void mouseDragged( MouseEvent ev ) { loc.translate( ev.getX( ) - p.x, ev.getY( ) - p.y ); // translate (dx,dy) setLocation( loc ); // component reposition in container v konstruktoru PJV09 ALG

Fire & listen Třída Component má pro typ Object a primitivní typy devět přetížených metod pro vyslání informace o změně hodnoty daného atributu: ( protected | public ) void firePropertyChange ( String propertyName, int oldValue, int newValue ) … ( String propertyName, Object oldValue, Object newValue ) Pro připojení a odpojení posluchače má metody: public void addPropertyChangeListener( String propertyName, java.beans.PropertyChangeListener pcl ) public void removePropertyChangeListener( Balíček java.beans definuje interface PropertyChangeListener obsahující jen metodu: public void propertyChange( java.beans.PropertyChangeEvent evt ) kde parametrem evt lze přistoupit k oldValue i newValue. PJV09

Architektura MVC = Model-View-Control http://java.sun.com/blueprints/patterns Model Zapouzdřuje stav Vyjevuje funkcionalitu Odpovídá na dotazy o stavu Notifikuje View o změně + registrace state query state change set get get state change + registrace View Vykresluje model Požaduje aktuální data od modelu Akceptuje gesta uživatele Notifikuje listenery Dovoluje vybrat pohled Control Zapouzdřuje chování aplikace Převádí akce do modelu Vybírá pohled view selection set user gesture method call event notification reference PJV09

MVC = Model-View-Control Server Model state query state change state change state query state change state change View View user gesture view selection user gesture view selection Control Control Client1 Client2 call method event notify PJV09

Počáteční interakce Application Model View Control new Model( ); new View( m ); register: addListener for state change Control new Control( m, v ); register: addListener for user gesture PJV09

Interakce Model View Control action1 action2 user gesture process state change set state change process state query get refresh action2 user gesture process view selection show PJV09