43
JAVA PROGRAMOZÁS 5.ELŐADÁS Dr. Pál László, Sapientia EMTE, Csíkszereda 5.ELŐADÁS Elrendezésmenedzserek, események 2014-2015 tavasz

JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/5.Eloadas.pdfEseményvezérelt programozás 18 A GUI eseményvezérelt, azaz a programot a futás közben keletkezett események

  • Upload
    others

  • View
    24

  • Download
    0

Embed Size (px)

Citation preview

Page 1: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/5.Eloadas.pdfEseményvezérelt programozás 18 A GUI eseményvezérelt, azaz a programot a futás közben keletkezett események

JAVA PROGRAMOZÁS5.ELŐADÁS

Dr. Pál László, Sapientia EMTE, Csíkszereda

5.ELŐADÁS

Elrendezésmenedzserek, események 2014-2015 tavasz

Page 2: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/5.Eloadas.pdfEseményvezérelt programozás 18 A GUI eseményvezérelt, azaz a programot a futás közben keletkezett események

Elrendezésmenedzserek2

Page 3: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/5.Eloadas.pdfEseményvezérelt programozás 18 A GUI eseményvezérelt, azaz a programot a futás közben keletkezett események

Elrendezésmenedzser3

� Minden konténernek van elrendezésmenedzsere� Szükség szerint automatikusan elrendezi a

konténer komponenseit, azok helyzetét és méretétméretét

� A programozó az alapértelmezett elrendezés-menedzsert kicserélheti másra

� Több lehetőség:� Előredefiniált osztályt választunk

� Egyéni rendezőt írunk

� Nem használunk elrendezés-menedzsert

Page 4: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/5.Eloadas.pdfEseményvezérelt programozás 18 A GUI eseményvezérelt, azaz a programot a futás közben keletkezett események

Elrendezésmenedzser4

� Az ablak pack utasítására automatikusan elrendezi a konténer komponenseit, azok helyzetét és méretét, figyelembe véve a gyerekkomponensek előnyös méreteit (a direkt módon megadott méreteket felülbírálja)

Page 5: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/5.Eloadas.pdfEseményvezérelt programozás 18 A GUI eseményvezérelt, azaz a programot a futás közben keletkezett események

Elrendezésmenedzser5

� Előredefiniált elrendezés-menedzserek:FlowLayout, GridLayout, BorderLayout,

CardLayout, GridBagLayout

� A Container osztály definiál egy elrendezés-A Container osztály definiál egy elrendezés-menedzsert (LayoutManager)

� A konténerbe került komponensek a menedzser felügyelete alá kerülnek

� A menedzser felülbírálható a setLayout(…) üzenettel vagy meg is szüntethető setLayout(null)

Page 6: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/5.Eloadas.pdfEseményvezérelt programozás 18 A GUI eseményvezérelt, azaz a programot a futás közben keletkezett események

Elrendezésmenedzser6

� A LayoutManager interfész� Minden elrendezés-menedzsernek implementálnia kell a

LayoutManager interfészt

� Container osztály idetartozó metódusai� Component add(Component comp)

Component add(Component comp, int index)

� void add(Component comp, Object constraints)void add(Component comp, Object constraints, int index)

� LayoutManager getLayout()void setLayout(LayoutManager mgr)

� void validate()

Page 7: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/5.Eloadas.pdfEseményvezérelt programozás 18 A GUI eseményvezérelt, azaz a programot a futás közben keletkezett események

FlowLayout – sorfolytonos elrendezés7

� Sorfolytonos elhelyezés balról jobbra

� Elemek mérete: előnyös méret (preferredSize) alapján, az ablak átméretezésekor nem változik

� Sorok igazítása(align): balra, jobbra, középre� Sorok igazítása(align): balra, jobbra, középre

� Komponensek közötti konstans távolság vízszintesen(hgap) és függőlegesen(vgap)

� JPanel és Applet alapértelmezett elrendezés-menedzsere

Page 8: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/5.Eloadas.pdfEseményvezérelt programozás 18 A GUI eseményvezérelt, azaz a programot a futás közben keletkezett események

FlowLayout – Példa8

Page 9: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/5.Eloadas.pdfEseményvezérelt programozás 18 A GUI eseményvezérelt, azaz a programot a futás közben keletkezett események

GridLayout – rácsos elrendezés9

� Megadott sor és oszlopszámú rácson való elhelyezés

� Rács cellái: egyenlő méretű téglalapok, minden

komponens egy téglalapot foglal el (nincs lyuk!)

� Elemek mérete: cellaméret, az ablak átméretezése-

kor változik

� Komponensek közötti konstans távolság

vízszintesen(hgap) és függőlegesen(vgap)

Page 10: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/5.Eloadas.pdfEseményvezérelt programozás 18 A GUI eseményvezérelt, azaz a programot a futás közben keletkezett események

GridLayout – Példa10

Page 11: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/5.Eloadas.pdfEseményvezérelt programozás 18 A GUI eseményvezérelt, azaz a programot a futás közben keletkezett események

BorderLayout – határ menti elrendezés

11

� 4+1 égtájon való elhelyezés: North (Észak), South

(Dél), West (Nyugat), East (Kelet), Center (Közép)

� Azonos égtájon levő elemek takarják egymást

Elemek mérete az ablak átméretezésekor változik� Elemek mérete az ablak átméretezésekor változik

� Komponensek közötti konstans távolságvízszintesen(hgap) és függőlegesen(vgap)

� Window és leszármazottainak (JFrame, JDialog), JFrame tartalompaneljének elrendezésmenedzsere

Page 12: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/5.Eloadas.pdfEseményvezérelt programozás 18 A GUI eseményvezérelt, azaz a programot a futás közben keletkezett események

BorderLayout – Példa12

Page 13: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/5.Eloadas.pdfEseményvezérelt programozás 18 A GUI eseményvezérelt, azaz a programot a futás közben keletkezett események

JPanel, az összefogó konténer13

� Konténer, mely összefogja a benne levő elemeket

� Láthatatlan, vagy látható (szín, keret)

� Alapértelmezésben dupla pufferelésű� Alapértelmezésben dupla pufferelésű

� Saját elrendezés-menedzsere van,

alapértelmezésben FlowLayout

Page 14: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/5.Eloadas.pdfEseményvezérelt programozás 18 A GUI eseményvezérelt, azaz a programot a futás közben keletkezett események

JPanel - Példa14

pnNev

pnSzulev

szemelyPanel(kitölti a keretet)

pnGomb

Page 15: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/5.Eloadas.pdfEseményvezérelt programozás 18 A GUI eseményvezérelt, azaz a programot a futás közben keletkezett események

JPanel - Példa15

Page 16: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/5.Eloadas.pdfEseményvezérelt programozás 18 A GUI eseményvezérelt, azaz a programot a futás közben keletkezett események

JPanel - Példa16

Page 17: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/5.Eloadas.pdfEseményvezérelt programozás 18 A GUI eseményvezérelt, azaz a programot a futás közben keletkezett események

Események17

Page 18: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/5.Eloadas.pdfEseményvezérelt programozás 18 A GUI eseményvezérelt, azaz a programot a futás közben keletkezett események

Eseményvezérelt programozás18

� A GUI eseményvezérelt, azaz a programot a futás közben keletkezett események vezérlik

� Esemény: egy objektum, amely mindig egy forrásobjektumhoz kötődikforrásobjektumhoz kötődik

� Eseménydelegációs modell: segítségével az esemény eljut a megfelelő figyelő objektumokhoz, amelyek feldolgozzák az eseményt

� Vannak alacsony szintű illetve magas szintű események

Page 19: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/5.Eloadas.pdfEseményvezérelt programozás 18 A GUI eseményvezérelt, azaz a programot a futás közben keletkezett események

Mintaprogram19

� Feladat: tegyünk a keretbe gombot. Ha lenyomják a gombot, akkor a számítógép sípoljon egyet.

:PittyegoKeretaz esemény figyelője (ActionListener)

btPittyeg:JButtonaz esemény forrása (ActionEvent)

Page 20: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/5.Eloadas.pdfEseményvezérelt programozás 18 A GUI eseményvezérelt, azaz a programot a futás közben keletkezett események

Mintaprogram20

Page 21: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/5.Eloadas.pdfEseményvezérelt programozás 18 A GUI eseményvezérelt, azaz a programot a futás közben keletkezett események

Mintaprogram21

Page 22: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/5.Eloadas.pdfEseményvezérelt programozás 18 A GUI eseményvezérelt, azaz a programot a futás közben keletkezett események

Eseményosztályok22

� Esemény: az alkalmazás által létrehozott objektum, mely a vele összefüggő információkat tartalmazza

� Esemény útja� operációs rendszer eseménysora� Alkalmazás� Alkalmazás� forrásobjektum� esemény figyelői

� A komponensen a felhasználó csak akkor válthat ki eseményt, ha a komponens� eleme az alkalmazás komponenshierarchiájának� látható

Page 23: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/5.Eloadas.pdfEseményvezérelt programozás 18 A GUI eseményvezérelt, azaz a programot a futás közben keletkezett események

Eseményosztályok23

� Minden eseményosztály közös őse a java.util.EventObject

� A Swing az AWT eseménymodellt használja

� Az AWT események a java.awt.event csomagban � Az AWT események a java.awt.event csomagban találhatók, míg a Swing események a javax.swing.event csomagban

� Az AWT események közös őse a java.awt.AWTEvent absztrakt osztály

Page 24: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/5.Eloadas.pdfEseményvezérelt programozás 18 A GUI eseményvezérelt, azaz a programot a futás közben keletkezett események

Eseményosztályok - Osztályhierarchia24

Page 25: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/5.Eloadas.pdfEseményvezérelt programozás 18 A GUI eseményvezérelt, azaz a programot a futás közben keletkezett események

Eseményosztályok25

� EventObject osztály

� protected Object source

� Object getSource()

� AWTEvent osztály� AWTEvent osztály

� Mezők:

� protected int id (Pl.: MOUSE_CLICKED)

� protected boolean consumed

� static final int RESERVED_ID_MAX

� static final long FOCUS_EVENT_MASK

� static final long KEY_EVENT_MASK

Page 26: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/5.Eloadas.pdfEseményvezérelt programozás 18 A GUI eseményvezérelt, azaz a programot a futás közben keletkezett események

Eseményosztályok26

� AWTEvent osztály

� Metódusok:

� int getID()

� protected void consume()

� protected boolean isConsumed()

Page 27: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/5.Eloadas.pdfEseményvezérelt programozás 18 A GUI eseményvezérelt, azaz a programot a futás közben keletkezett események

Alacsony szintű események27

� Operációs rendszer szintjén történő elemi esemény

� Forrása csak komponens lehet

� ComponentEvent utódja

� Alacsony szintű AWT események:� Alacsony szintű AWT események:� ComponentEvent: Komponensesemény

� ContainerEvent: Konténeresemény

� FocusEvent: Fókuszesemény

� WindowEvent: Ablakesemény

� KeyEvent: Billentyűzetesemény

� MouseEvent: Egéresemény

Page 28: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/5.Eloadas.pdfEseményvezérelt programozás 18 A GUI eseményvezérelt, azaz a programot a futás közben keletkezett események

Magas szintű események28

� Minden esemény, ami nem alacsony szintű

� Általában logikai esemény

� Forrása nem feltétlenül komponens

� Magas szintű események:� Magas szintű események:

� ActionEvent: Akcióesemény

� AdjustmentEvent: Igazítási esemény

� ListSelectionEvent: Listakiválasztás-esemény

� DocumentEvent: Dokumentumesemény

� …

Page 29: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/5.Eloadas.pdfEseményvezérelt programozás 18 A GUI eseményvezérelt, azaz a programot a futás közben keletkezett események

Eseménydelegációs modell29

� Modell elemei:

� Eseményobjektum

� Eseményforrás (forrásobjektum) és figyelőláncai

� Eseményfigyelő� Eseményfigyelő� Az eseményt figyelő és lekezelő objektum

� Fel kell fűzni a forrásobjektum megfelelő figyelőláncára

� Osztályának implementálnia kell a figyelő interfészt

� Esemény feldolgozása

� Forrásobjektum

� Figyelő objektumok

Page 30: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/5.Eloadas.pdfEseményvezérelt programozás 18 A GUI eseményvezérelt, azaz a programot a futás közben keletkezett események

A JButton akció- és billentyűzetfigyelő

lánca30

Page 31: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/5.Eloadas.pdfEseményvezérelt programozás 18 A GUI eseményvezérelt, azaz a programot a futás közben keletkezett események

Alacsony szintű események31

Page 32: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/5.Eloadas.pdfEseményvezérelt programozás 18 A GUI eseményvezérelt, azaz a programot a futás közben keletkezett események

Alacsony szintű események32

Page 33: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/5.Eloadas.pdfEseményvezérelt programozás 18 A GUI eseményvezérelt, azaz a programot a futás közben keletkezett események

Magas szintű események33

Page 34: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/5.Eloadas.pdfEseményvezérelt programozás 18 A GUI eseményvezérelt, azaz a programot a futás közben keletkezett események

A felhasználói felület tervezése34

� Felhasználói felület képének megtervezése: keret és komponensei

� Eseményforrások meghatározása: azonosító/osztály + zárójelben esemény osztálya+ zárójelben esemény osztálya

� Eseményfigyelők meghatározása: azonosító/osztály + zárójelben: figyelő interfész, figyelt objektum(ok) azonosítója (azonosítói)

� Szükség esetén tulajdonosi hierarchia megtervezése

Page 35: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/5.Eloadas.pdfEseményvezérelt programozás 18 A GUI eseményvezérelt, azaz a programot a futás közben keletkezett események

Példa - Nyomásszámláló35

� Feladat: tegyünk két nyomógombot a keretbe, indulásképpen mindkettőnek "0" legyen a felirata! Ha lenyomnak egy gombot, akkor növeljük meg eggyel a rajta levő szám értékét!

btJobb (ActionEvent)btBal (ActionEvent)

:NyomasSzamlalo(ActionListener,btBal,btJobb)

Page 36: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/5.Eloadas.pdfEseményvezérelt programozás 18 A GUI eseményvezérelt, azaz a programot a futás közben keletkezett események

Példa - Nyomásszámláló36

Page 37: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/5.Eloadas.pdfEseményvezérelt programozás 18 A GUI eseményvezérelt, azaz a programot a futás közben keletkezett események

Példa - Nyomásszámláló37

� Feladat: Készítsünk egy keretet! Ha a keretet be akarják csukni, akkor csukódjon be úgy, hogy a program rövid hangot hallat és befejezi futását

:AblakBecsuk(WindowEvent)(WindowListener)

Page 38: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/5.Eloadas.pdfEseményvezérelt programozás 18 A GUI eseményvezérelt, azaz a programot a futás közben keletkezett események

Példa - Nyomásszámláló38

Page 39: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/5.Eloadas.pdfEseményvezérelt programozás 18 A GUI eseményvezérelt, azaz a programot a futás közben keletkezett események

Eseményadapterek39

� Eseményadapter:� Absztrakt osztály

� A figyelő interfészt üres metódusokkal implementálja

Figyelő interfész Adapter osztály Metódusok száma

ComponentListener ComponentAdapter 4

ContainerListener ContainerAdapter 2

FocusListener FocusAdapter 2

KeyListener KeyAdapter 3

MouseListener MouseAdapter 5

MouseMotionListener MouseMotionAdapter 2

WindowListener WindowAdapter 7

Page 40: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/5.Eloadas.pdfEseményvezérelt programozás 18 A GUI eseményvezérelt, azaz a programot a futás közben keletkezett események

Eseményadapterek40

� Jó lenne, ha az eseménykezelő metódusok osztálya örökölhetné az eseményadaptert

� Gond: Javában nincs kettős öröklés, egy osztály nem lehet adapter és komponens egyszerre

� Megoldás: eseményadapter osztály alkalmazása mint belső osztály

Page 41: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/5.Eloadas.pdfEseményvezérelt programozás 18 A GUI eseményvezérelt, azaz a programot a futás közben keletkezett események

Eseményadapterek - Példa41

� Ablak becsukása adapter osztállyal:

Page 42: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/5.Eloadas.pdfEseményvezérelt programozás 18 A GUI eseményvezérelt, azaz a programot a futás közben keletkezett események

Eseményadapterek - Példa42

� Ablak becsukása adapter osztállyal:

Page 43: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/5.Eloadas.pdfEseményvezérelt programozás 18 A GUI eseményvezérelt, azaz a programot a futás közben keletkezett események

Könyvészet43

� Angster Erzsébet, Objektumorientált tervezés és programozás. Java I-II. (Bazele programării orientate pe obiecte), Ed. 4 Kör Bt., Budapesta, 2002.

� Kathy Sierra, Bert Bates: Agyhullám: Java, Kiskapú, 2011.2011.