aloi feluletek java foundation classes - jfcaszt.inf.elte.hu/~kto/teaching/java/pdf/12_awt_c.pdf9 az...

24
1 Grafikus felhaszna loi felu letek Java tutorial Copyright 2000-2002, Kozsik Tama s Grafikus felhaszna loi felu letek ú A felhaszna lo a programmal gy tartja a kapcsolatot, hogy ö egeret hzogat ö menu pontokbol va logat ö gombokat nyomogat ö lista kban kijelé lget ö ... Java Foundation Classes - JFC ú Abstract Windowing Toolkit - AWT ö ablakozo rendszer ú Swing ú Accessability ú Drag-and-drop ú Java2D ú Pluggable Look-And-Feel Abstract Windowing Toolkit - AWT ú Ablakozo rendszer ú Egyse ges lehet˝ se gek minden platformon ö Motif, Windows, MacOS, ... ö A ku lé nfe le rendszerek lehet˝ se geinek metszete ö Picit fapados...(?) ú java.awt csomag, valamint alcsomagok ö java.awt.color, java.awt.event, java.awt.font, ... ú Ugyanaz a program minden platformon fut Els˝ program import java.awt.Frame; class Ablak { public static void main(String args[]){ Frame f = new Frame(); f.setSize(100,200); f.setVisible(true); } } PDF created with FinePrint pdfFactory trial version http://www.fineprint.com

Upload: others

Post on 26-Jul-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: aloi feluletek Java Foundation Classes - JFCaszt.inf.elte.hu/~kto/teaching/java/pdf/12_awt_c.pdf9 Az elhelyezes sorrendje es modja ú Ha van, akit eszakra tettek, a BorderLayout elhelyez˝

1

Grafikus felhaszna loi feluletekJava tutorial

Copyright • 2000-2002, Kozsik Tama s

Grafikus felhaszna loi feluletek

ú A felhaszna lo a programmal –gy tartja akapcsolatot, hogyö egeret h–zogatö menupontokbol va logatö gombokat nyomogatö lista kban kijelé lgetö ...

Java Foundation Classes - JFC

ú Abstract Windowing Toolkit - AWTö ablakozo rendszer

ú Swingú Accessabilityú Drag-and-dropú Java2Dú Pluggable Look-And-Feel

Abstract Windowing Toolkit - AWT

ú Ablakozo rendszerú Egyseges lehet˝ segek minden platformon

ö Motif, Windows, MacOS, ...ö A kulé nfe le rendszerek lehet˝ segeinek metszeteö Picit fapados...(?)

ú java.awt csomag, valamint alcsomagokö java.awt.color, java.awt.event, java.awt.font, ...

ú Ugyanaz a program minden platformon fut

Els˝ programimport java.awt.Frame;class Ablak { public static void main(String args[]){ Frame f = new Frame(); f.setSize(100,200); f.setVisible(true); }}

PDF created with FinePrint pdfFactory trial version http://www.fineprint.com

Page 2: aloi feluletek Java Foundation Classes - JFCaszt.inf.elte.hu/~kto/teaching/java/pdf/12_awt_c.pdf9 Az elhelyezes sorrendje es modja ú Ha van, akit eszakra tettek, a BorderLayout elhelyez˝

2

Frame

ú Egy keret, f˝ program-keperny˝ú Alapvet˝ funkcionalita s

ö mozgathatoö a tme retezhet˝ (a sarka na l fogva)ö ikoniza lhato, visszaa llıthatoö opciona lis cımsor

ú Sok minden hia nyzik megö pe lda ul beza ra s

Hogyan ırjunk programot atanfolyamon

import java.awt.*;class Hello extends Frame { public static void main(String args[]){ Hello hello = new Hello(); hello.setSize(100,200); hello.setVisible(true); }}

Hogyan ırjunk programot atanfolyamon

import java.awt.*;class Hello extends Frame { public Hello(){ super("Hello"); } public static void main(String args[]){ Hello hello = new Hello(); hello.setSize(100,200); hello.setVisible(true); }}

A grafikus felulet elemeiú Komponensek (Component)ú Szoka s widget-nek is nevezniú Cımkek, nyomogombok, lista k, legé rdul˝

lista k, kiva laszto dobozok, "ra dio" dobozok,szé veg beviteli mez˝ k, ...

ú Label, Button, List, Choice, Checkbox,TextField, TextArea, ...

ú A menuk egy picit ma s temaké rbe tartoznak

A komponensek kiproba la saú Vegigproba ljuk a komponenseketú Nagyja bol ugyan–gy neznek ki es

mÁké dnek minden platformonú Az eddigi programban a konstruktor

té rzsebe tesszuk a komponensekle trehoza sa t

ú Piszka lni ma r lehet a komponenseket, de aprogramunkat meg nem keszıtjuk fel arra,hogy csina ljanak valamit is

Java tutorial

Copyright • 2000-2002, Kozsik Tama s

PDF created with FinePrint pdfFactory trial version http://www.fineprint.com

Page 3: aloi feluletek Java Foundation Classes - JFCaszt.inf.elte.hu/~kto/teaching/java/pdf/12_awt_c.pdf9 Az elhelyezes sorrendje es modja ú Ha van, akit eszakra tettek, a BorderLayout elhelyez˝

3

A komponensek: Labelimport java.awt.*;class Hello extends Frame { public Hello(){ super("Hello"); add(new Label("Hello")); } public static void main(String args[]){ Hello hello = new Hello(); hello.setSize(100,200); hello.setVisible(true); }}

A komponensek:Label ké zepre igazıtott szé veggelimport java.awt.*;class Hello extends Frame { public Hello(){ super("Hello"); add(new Label("Hello", Label.CENTER)); } public static void main(String args[]){ Hello hello = new Hello(); hello.setSize(100,200); hello.setVisible(true); }}

Java tutorial

Copyright • 2000-2002, Kozsik Tama s

A komponensek: Buttonimport java.awt.*;class Hello extends Frame { public Hello(){ super("Hello"); add(new Button("Hello")); } public static void main(String args[]){ Hello hello = new Hello(); hello.setSize(100,200); hello.setVisible(true); }}

A komponensek: Checkboximport java.awt.*;class Hello extends Frame { public Hello(){ super("Hello"); add(new Checkbox("Hello")); } public static void main(String args[]){ Hello hello = new Hello(); hello.setSize(100,200); hello.setVisible(true); }}

A komponensek: TextFieldimport java.awt.*;class Hello extends Frame { public Hello(){ super("Hello"); add(new TextField("Hello")); } public static void main(String args[]){ Hello hello = new Hello(); hello.setSize(100,200); hello.setVisible(true); }}

PDF created with FinePrint pdfFactory trial version http://www.fineprint.com

Page 4: aloi feluletek Java Foundation Classes - JFCaszt.inf.elte.hu/~kto/teaching/java/pdf/12_awt_c.pdf9 Az elhelyezes sorrendje es modja ú Ha van, akit eszakra tettek, a BorderLayout elhelyez˝

4

A komponensek: TextAreaimport java.awt.*;class Hello extends Frame { public Hello(){ super("Hello"); add(new TextArea("Hello")); } public static void main(String args[]){ Hello hello = new Hello(); hello.setSize(100,200); hello.setVisible(true); }}

A komponensek: Listimport java.awt.*;class Hello extends Frame { public Hello(){ super("Hello"); List list = new List(10); list.add("Szia"); list.add("Hello"); list.add("Salut"); add(list); } public static void main(String args[]){...}}

A komponensek: List (multi)import java.awt.*;class Hello extends Frame { public Hello(){ super("Hello"); List list = new List(10, true); list.add("Szia"); list.add("Hello"); list.add("Salut"); add(list); } public static void main(String args[]){...}}

A komponensek: Choiceimport java.awt.*;class Hello extends Frame { public Hello(){ super("Hello"); Choice choice = new Choice(); choice.add("Szia"); choice.add("Hello"); choice.add("Salut"); add(choice); } public static void main(String args[]){...}}

Java tutorial

Copyright • 2000-2002, Kozsik Tama s

Kontener (Container)ú Komponenseket tartalmazhatú A kontenerek is komponensekú A kontenerek tova bbi kontenereket

tartalmazhatnak: egyma sba a gyaza sú A Frame is egy kontenerú Egy ma sik gyakran haszna lt: Panel

ö Egyebek: Window, Dialog, ScrollPane, Appletú Egyuve tartozo keperny˝ elemek é sszefoga sa ra

PDF created with FinePrint pdfFactory trial version http://www.fineprint.com

Page 5: aloi feluletek Java Foundation Classes - JFCaszt.inf.elte.hu/~kto/teaching/java/pdf/12_awt_c.pdf9 Az elhelyezes sorrendje es modja ú Ha van, akit eszakra tettek, a BorderLayout elhelyez˝

5

A kontener tervezesi minta(Container design pattern)

Component

Container

Java tutorial

Copyright • 2000-2002, Kozsik Tama s

Panel

ú Egy kontener (egyben komponens)ú Igaza ndibol nem is la tszik, hogy ott van

Panel, mint komponensimport java.awt.*;class Hello extends Frame { public Hello(){ super("Hello"); add(new Panel()); } public static void main(String args[]){ Hello hello = new Hello(); hello.setSize(100,200); hello.setVisible(true); }}

Panel, mint kontenerimport java.awt.*;class Hello extends Frame { public Hello(){ super("Hello"); Panel panel = new Panel(); panel.add(new Button("Szia")); panel.add(new Button("Hello")); panel.add(new Button("Salut")); add(panel); } public static void main(String args[]){...}}

Komponensek elhelyezese

ú Eddig csak le trehoztuk a komponenseket esbelepakoltuk egy kontenerbe

ú Nem mondtuk meg, hogy mekkora legyen,es hova keruljé n

ú A tme retezesne l automatikusanva ltoztak/mozogtak a komponensek

PDF created with FinePrint pdfFactory trial version http://www.fineprint.com

Page 6: aloi feluletek Java Foundation Classes - JFCaszt.inf.elte.hu/~kto/teaching/java/pdf/12_awt_c.pdf9 Az elhelyezes sorrendje es modja ú Ha van, akit eszakra tettek, a BorderLayout elhelyez˝

6

Explicit elhelyezes

ú Egy felhaszna loi felulet elkeszıtesene l az egyiklegnehezebb feladat az elhelyezes...

ú ... Aminek nagy resze az a tme retezes ké veteseú Explicit programoza ssal ugyan megoldhato, de

az nagyon macera s, sokat kell sza molgatni

ú Megolda s Java-ban: Layout Manager

Layout Manager

ú A programozonak nem kell foglalkozni azelhelyezes reszleteivel

ú Magas szinten (kell˝ en absztrakt nyelven)fogalmazhatja meg az igenyeitö mi hova keruljé nö mi mekkora legyen

ú Nem ké telez˝ Layout Manager-t haszna lni,de tenyleg ké nnyebb azzal...

Layout manager -elhelyezesi strategia

ú Egy konteneren belul hogyan kell akomponenseket elhelyezni

ú Té bb predefinit LM haszna lhatoö BorderLayoutö FlowLayoutö GridLayoutö CardLayoutö GridBagLayout (ehhez ma r gyakorlat kell)ö egyeb (la sd Swing)

ú Irhatunk saja tot is (ehhez nagy gyakorlat kell)

Java tutorial

Copyright • 2000-2002, Kozsik Tama s

FlowLayoutú A komponenseket folyamatosan kell

elhelyezniú Meg kell ke rdezni a komponensekt˝ l, hogy

mekkora k ”szeretnenek lenniÉú Amıg fe rnek egyma s melle ...ú Ha nem, akkor ké vetkez˝ sorban folytatni

ö alape rtelmeze sben ké zepre igazıtva a sorbanú Ami sehogy sem fe r, az nem jelenik meg

rendesen

FlowLayout - Panel

ú A Panel kontenerekben az alape rtelmezettLayout Manager a FlowLayout

ú A pe lda nk is ilyet mutatott beú Figyeljuk meg, hogyan viselkedika tme retezesne l

PDF created with FinePrint pdfFactory trial version http://www.fineprint.com

Page 7: aloi feluletek Java Foundation Classes - JFCaszt.inf.elte.hu/~kto/teaching/java/pdf/12_awt_c.pdf9 Az elhelyezes sorrendje es modja ú Ha van, akit eszakra tettek, a BorderLayout elhelyez˝

7

Frame - FlowLayout?

ú A Frame kontenerekne l az alape rtelmezettnem a FlowLayout

ú De ott is be lehet a llıtani, hogy egybizonyos Frame objektumnak az legyen aLayout Manager-e

setLayout(new FlowLayout());

Frame, de nem FlowLayoutimport java.awt.*;class Hello extends Frame { public Hello(){ super("Hello"); add(new Button("Szia")); add(new Button("Hello")); add(new Button("Salut")); } public static void main(String args[]){...}}

Frame + FlowLayoutimport java.awt.*;class Hello extends Frame { public Hello(){ super("Hello"); setLayout(new FlowLayout()); add(new Button("Szia")); add(new Button("Hello")); add(new Button("Salut")); } public static void main(String args[]){...}}

Java tutorial

Copyright • 2000-2002, Kozsik Tama s

Border Layoutú A kontener sze lehez té rten˝ igazıta sú Elhelyezes az egta jaknak megfelel˝ enú Legfeljebb é t komponens helyezhet˝ el

CENTERWEST

SOUTH

EAST

NORTHCENTERWEST

SOUTH

EAST

NORTH

PDF created with FinePrint pdfFactory trial version http://www.fineprint.com

Page 8: aloi feluletek Java Foundation Classes - JFCaszt.inf.elte.hu/~kto/teaching/java/pdf/12_awt_c.pdf9 Az elhelyezes sorrendje es modja ú Ha van, akit eszakra tettek, a BorderLayout elhelyez˝

8

CENTERWEST

SOUTH

EAST

NORTH

CENTERWEST

SOUTH

EAST

CENTERWEST

SOUTH

WEST

SOUTH

Java tutorial

Copyright • 2000-2002, Kozsik Tama s

Pe lda ul é t nyomogombimport java.awt.*;class Hello extends Frame { public Hello(){ super("Hello"); add(new Button("Fent"), BorderLayout.NORTH); add(new Button("Lent"), BorderLayout.SOUTH); add(new Button("Balra"), BorderLayout.WEST); add(new Button("Jobbra"), BorderLayout.EAST); add(new Button("Kozepen"), BorderLayout.CENTER); } public static void main(String args[]){...}}

PDF created with FinePrint pdfFactory trial version http://www.fineprint.com

Page 9: aloi feluletek Java Foundation Classes - JFCaszt.inf.elte.hu/~kto/teaching/java/pdf/12_awt_c.pdf9 Az elhelyezes sorrendje es modja ú Ha van, akit eszakra tettek, a BorderLayout elhelyez˝

9

Az elhelyezes sorrendje es modjaú Ha van, akit eszakra tettek, a BorderLayout

elhelyez˝ objektum leke rdezi, milyen magasszeretne lenni, es olyan magas lesz, eszakon

ú Sze lteben meg akkora, hogy kité ltse a kontenert

NORTH

Az elhelyezes sorrendje es modjaú Ha van, akit eszakra tettek, a BorderLayout

elhelyez˝ objektum leke rdezi, milyen magasszeretne lenni, es olyan magas lesz, eszakon

ú Sze lteben meg akkora, hogy kité ltse a kontenert

NORTH

Pe lda ul egy nyomogombna l a felirata hata rozza meg, hogymekkora szeretne lenni

Az elhelyezes sorrendje es modja

ú Ha van, akit de lre tettek, ugyanezen strategia vallesz elhelyezve, csak de len

ú Tegyuk fel, hogy most nincs senki de len:

NORTH

SOUTH

Az elhelyezes sorrendje es modjaú Ha van, akit nyugatra tettek, leke rdezzuk,

milyen sze les szeretne lenni, es olyan leszú A magassa ga: amilyen magas csak lehet azeszak es de l figyelembe ve televel

NORTH

WEST

Az elhelyezes sorrendje es modja

ú Ha van, akit keletre tettek, ugyanezzel astrategia val lesz elhelyezve, csak keletre

NORTH

WEST EAST

Az elhelyezes sorrendje es modjaú Vegul a ké zepre tett komponens, ha van olyan,

akkor kité lti a rendelkezesre a llo maradekteruletet.

NORTH

WEST EASTCENTER

PDF created with FinePrint pdfFactory trial version http://www.fineprint.com

Page 10: aloi feluletek Java Foundation Classes - JFCaszt.inf.elte.hu/~kto/teaching/java/pdf/12_awt_c.pdf9 Az elhelyezes sorrendje es modja ú Ha van, akit eszakra tettek, a BorderLayout elhelyez˝

10

Az elhelyezes sorrendje es modjaú Vegul a ké zepre tett komponens, ha van olyan,

akkor kité lti a rendelkezesre a llo maradekteruletet.

ú A pe lda nkban most ne legyen center komponens

NORTH

WEST EAST

BorderLayout bea llıta saú A Frame-ne l a BorderLayout az

alape rtelmezettú Ma s kontenerne l a setLayout metodus

meghıva sa val kell bea llıtanunkú Pe lda ul egy panelne l:

Panel panel = new Panel();panel.setLayout( new BorderLayout() );panel.add( new Button("Bal"), BorderLayout.WEST );

...

Visszate rve egy kora bbi programraimport java.awt.*;class Hello extends Frame { public Hello(){ super("Hello"); add(new Button("Szia")); add(new Button("Hello")); add(new Button("Salut")); } public static void main(String args[]){...}}

ú Az egy parame teres add() a CENTER-be tesz

Java tutorial

Copyright • 2000-2002, Kozsik Tama s

Grid Layout Managerú Ha ugyanakkora komponenseket akarok

elhelyezni egy franciakocka s ra csbansetLayout( new GridLayout(3,0) );

ú Meg kell adni, hogy a ra csnak ha ny sora vagyha ny oszlopa legyen

ú Uta na az egy parame teres add() haszna lhatoú A ra cs me rete t a ma sik dimenzioban a

komponensek sza ma hata rozza megú Pe lda ul a fent le trehozott elrendez˝ objektum

ha rom sort alakıt majd ki...

GridLayout konstruktoraú Ke t parame tert va rú Ha az els˝ parame ternek pozitıv sza mot

adunk meg, akkor annyi sort alakıt majd ki.Ilyenkor a ma sodik parame ter indifferens.

ú Ha az els˝ parame ter nulla, akkor ama sodiknak kell pozitıvnak lennie, es ez akialakıtando oszlopok sza ma t adja meg

setLayout( new GridLayout(3,0) );setLayout( new GridLayout(3,4) );setLayout( new GridLayout(3,1000) );

PDF created with FinePrint pdfFactory trial version http://www.fineprint.com

Page 11: aloi feluletek Java Foundation Classes - JFCaszt.inf.elte.hu/~kto/teaching/java/pdf/12_awt_c.pdf9 Az elhelyezes sorrendje es modja ú Ha van, akit eszakra tettek, a BorderLayout elhelyez˝

11

Java tutorial

Copyright • 2000-2002, Kozsik Tama s

Feladat

ú Keszıtsunk nyomogombokbol egytelefonbillentyÁzetet, amin 12 gombtala lhato: a sza mok 1-t˝ l 9-ig, valamint a*0#karakterek. Minden gomb legyenugyanakkora, es legyenek egy 4 soros esha rom oszlopos ra csban!

Bonyolultabb keperny˝ kep

TextArea

Problema

Megolda s: Kontenerek es LayoutManager-ek egyma sba a gyaza sa

Panel p1 Panel p2

FrameBorderLayout

Panel p1BorderLayout

Panel p2GridLayout

A megoldo programkodimport java.awt.*;class OC extends Frame { public OC(){ add(new TextArea(), BorderLayout.CENTER); Panel p1 = new Panel(); add(p1,BorderLayout.SOUTH); p1.setLayout(new BorderLayout()); Panel p2 = new Panel(); p1.add(p2,BorderLayout.EAST); p2.setLayout(new GridLayout(1,0)); p2.add(new Button("Ok")); p2.add(new Button("Cancel")); } public static void main( String[] args ){ OC oc = new OC(); oc.pack(); oc.setVisible(true); }}

PDF created with FinePrint pdfFactory trial version http://www.fineprint.com

Page 12: aloi feluletek Java Foundation Classes - JFCaszt.inf.elte.hu/~kto/teaching/java/pdf/12_awt_c.pdf9 Az elhelyezes sorrendje es modja ú Ha van, akit eszakra tettek, a BorderLayout elhelyez˝

12

Feladatú Proba ljuk ki az el˝ bbi programot, de kis

modosıta sokkal: ırjunk egy egyszerÁszé vegszerkeszt˝ programotö A ke t nyomogomb: Save es Load legyenö Legyen egy TextField is, amibe a szerkesztend˝

fa jlnevet kell megadni. Ezt egy cımke jelezze el˝ tte.

Filename: LoadSave

Feladat

ú Tervezzunk meg egy Chat programot,melyben egyma s alatt ke t, egyforma me retÁTextArea tala lhato, valamint alattuk egy, azablak sze lessege t felvev˝ , ”SendÉ felirat–nyomogomb.

Ha zi feladat

ú A telefonos programunkat alakıtsuk –gy a t,hogy a Frame-en belul a telefonos panelmindig a bal fels˝ sarokban helyezkedjen el,es mindig ugyanakkora legyen. (Amekkoraszeretne lenni...)

ú Figyeljuk meg, hogy hogyan viselkedik atelefonos panel, ha egesz kicsire vesszuk leaz ablakot!

Java tutorial

Copyright • 2000-2002, Kozsik Tama s

Csina ljon vegre valamit a program...

ú Rendeljunk funkcionalita st afeluletelemekhez

ú Specifika ljuk, hogy mi té rtenjen, amikorvalaki piszka l egy feluletelemet

ú Esemeny-orienta lt szemle letú Ma s nyelvekben / ablakozo rendszerekben

gyakran: call-back elja ra sok

Mi té rtenjen, ha...ú Hagyoma nyos esemenymodell

ö A komponens eldé nti, hogy mit akar csina lni, ha˝ t megpiszka lta k

ö Ha megsem, akkor e rtesıti az ˝ t tartalmazokontenert

ö E s ıgy tova bb...ö Java 1.0

ú U j, fejlettebb esemenymodell: Java 1.1-to l

PDF created with FinePrint pdfFactory trial version http://www.fineprint.com

Page 13: aloi feluletek Java Foundation Classes - JFCaszt.inf.elte.hu/~kto/teaching/java/pdf/12_awt_c.pdf9 Az elhelyezes sorrendje es modja ú Ha van, akit eszakra tettek, a BorderLayout elhelyez˝

13

Esemenymodell

ú Esemeny forra sa: amivel té rtenhet valamiö pe lda ul egy feluletelem, pe lda ul egy nyomogomb

ú Esemeny: ami té rtentö pe lda ul lenyomta k

ú Figyel˝ : ami reaga lni tud az esemenyreö tartalmazza a kodot, amit vegre kell hajtani

Java tutorial

Copyright • 2000-2002, Kozsik Tama s

A resztvev˝ k

Esemeny(Event)Forra s

(Source)Figyel˝

(Listener)

Ké rnyezeti hata s

A resztvev˝ k

Esemeny(Event)Forra s

(Source)Figyel˝

(Listener)

Figyel˝(Listener)

Figyel˝(Listener)

A resztvev˝ k

Esemeny(Event)Forra s

(Source)Figyel˝

(Listener)

Figyel˝(Listener)

Figyel˝(Listener)

Forra s(Source)

Esemeny(Event)

Figyel˝(Listener)

AWT-s pe lda

Lenyomtak!

nyomogomb

Elmentjuk a fa jlt

Egy menupontotkiszurkıtunk

A programhaszna loja

lenyomja

...

PDF created with FinePrint pdfFactory trial version http://www.fineprint.com

Page 14: aloi feluletek Java Foundation Classes - JFCaszt.inf.elte.hu/~kto/teaching/java/pdf/12_awt_c.pdf9 Az elhelyezes sorrendje es modja ú Ha van, akit eszakra tettek, a BorderLayout elhelyez˝

14

Ezek csak szerepek!

Lenyomtak!

nyomogomb

Elmentjuk a fa jlt

Egy menupontotkiszurkıtunk

A programhaszna loja

lenyomja

...

A szerepl˝ k tıpusa

ActionEvent

Button

ActionListener

ActionListener

A programhaszna loja

lenyomja

ActionListener

Sokfe le resztvev˝ van

WindowEvent

Window

WindowListener

WindowListener

A programhaszna loja

ikoniza lja

WindowListener

A kapcsolat felve tele

Button

ActionListener

public void addActionListener(ActionListener l)public void removeActionListener(ActionListener l)

Regisztra cio

egy interfesz

A kapcsolat felve tele

Button

ActionListener

public void addActionListener(ActionListener l)public void removeActionListener(ActionListener l)

Regisztra cio

egy interfesz

ActionListener

Esemeny eljuttata sa

ActionEvent

Button

ActionListener

ActionListener

A programhaszna loja

lenyomja

public void actionPerformed(ActionEvent e)

PDF created with FinePrint pdfFactory trial version http://www.fineprint.com

Page 15: aloi feluletek Java Foundation Classes - JFCaszt.inf.elte.hu/~kto/teaching/java/pdf/12_awt_c.pdf9 Az elhelyezes sorrendje es modja ú Ha van, akit eszakra tettek, a BorderLayout elhelyez˝

15

Esemeny lekezelese

ActionEvent

Button

ActionListener

ActionListener

A programhaszna loja

lenyomja

public void actionPerformed(ActionEvent e){ ...}

Java tutorial

Copyright • 2000-2002, Kozsik Tama s

Feladat

ú Irjunk esemenykezel˝ oszta lyt, es egype lda nya t kapcsoljuk hozza Chat programSend nyomogombja hoz. A figyel˝ reakciojaaz legyen, hogy kiırja a szabva nyoskimenetre, hogy lenyomta k az a ltala figyeltgombot.

ú Haszna ld a java.awt.event csomagot!ú Proba lj meg le trehozni es a nyomogombhoz

kapcsolni ke t pe lda nyt a figyel˝ oszta lybol

Megolda s

import java.awt.event.*;public class Figyelo implements ActionListener { public void actionPerformed( ActionEvent e ){ System.out.println("Lenyomtak!"); }}

Button b = new Button("Send");add(b, BorderLayout.SOUTH);b.addActionListener( new Figyelo() );b.addActionListener( new Figyelo() );

Feladatú Lehet maga a Chat program is egy figyel˝ .

Csina lja azt, hogy az also TextArea tartalma thozza fÁzi a fels˝ ehez, es le is té rli az alsot.ö getText, setText, appendö a TextArea-kbol attrib–tumot kell csina lni, hogy

a referencia k a metodushıva sok ké zben ismegmaradjanak (hogy minden metodusbolhaszna lhassuk ˝ ket)

ú Azta n id˝ vel a ke t ma sik figyel˝ t ki is leheta m venni... :-)

Kulé na llo oszta lyú Sok esetben kenyelmes, ha az

esemenykezel˝ t nem kulé na llo oszta lykentvalosıtjuk meg

ú Direkt hozza fe res szukseges akomponensekhez

ú Van, amikor az sem kenyelmes, ha a Frame-be tesszuk az esemenykezelest

ú Bea gyazott oszta lyok segıtenek majd...

PDF created with FinePrint pdfFactory trial version http://www.fineprint.com

Page 16: aloi feluletek Java Foundation Classes - JFCaszt.inf.elte.hu/~kto/teaching/java/pdf/12_awt_c.pdf9 Az elhelyezes sorrendje es modja ú Ha van, akit eszakra tettek, a BorderLayout elhelyez˝

16

Feladat

ú Irjuk meg a Chat programot –gy, hogy azesemenykezeles kulé n oszta lyban legyen.

ú A szukseges informa ciokat el kell juttatni azesemenykezelest vegz˝ objektumhoz...

Bea gyazott oszta lyok

ú A bea gyazott oszta lyok segıtsegevelkenyelmesebb

ú Nevtelen oszta lyokú Az informa cio megfelel˝ helyre té rten˝

eljuttata sa val nem kell foglalkozni

Feladat

ú Ird meg a Chat programot –gy, hogynevtelen oszta lyt haszna lsz azesemenykezeleshez!

Java tutorial

Copyright • 2000-2002, Kozsik Tama s

Ma s esemenyek

ú WindowEvent, KeyEvent, ItemEvent,MouseEvent, MouseMotionEvent,ComponentEvent, ContainerEvent, stb.

ú Minden komponensne l kitala lhato, hogymilyen esemenyt tud kiva ltaniö add*Listener (addWindowListener, addKeyListener)

ú Ablak becsuka sa: WindowEvent

WindowEvent, WindowListenerú WindowEvent: az ablakokkal kapcsolatos

esemenyek é sszefoglalo neveú WindowListener

ö windowActivated( WindowEvent e )ö windowDeactivated( WindowEvent e )ö windowOpened( WindowEvent e )ö windowClosed( WindowEvent e )ö windowClosing( WindowEvent e )ö windowIconified( WindowEvent e )ö windowDeiconified( WindowEvent e )

PDF created with FinePrint pdfFactory trial version http://www.fineprint.com

Page 17: aloi feluletek Java Foundation Classes - JFCaszt.inf.elte.hu/~kto/teaching/java/pdf/12_awt_c.pdf9 Az elhelyezes sorrendje es modja ú Ha van, akit eszakra tettek, a BorderLayout elhelyez˝

17

(Window)Adapterú Ha egy WindowListener-t ırunk, akkor meg

kell valosıtani 7 metodustú Fé lé slegesen macera s, mert sokszor csak egy

metodus e rdekel minket, a té bbi nemö a té bbinek –gyis ures té rzset ırna nk

ú Haszna ljunk helyette WindowAdapter-tú Ez egy oszta ly, ami ures té rzzsel valosıtja

meg a 7 metodust a WindowListener-b˝ lú Lesza rmaztatunk bel˝ le, es ami kell,

feluldefinia ljuk, a té bbit é ré ké ljuk

Java tutorial

Copyright • 2000-2002, Kozsik Tama s

Feladat

ú A Chat programot egeszıtsuk ki –gy, hogyki lehessen bel˝ le lepni.

ú System.exit(0);ú Figyelem! Hibaforra s: ha rosszul ırjuk be a

windowClosing neve t vagyparame terezese t, a fordıto nem fog szolni,mert é ré kl˝ dik az ures té rzsÁ metodus...

Feladat

ú Csina ljuk azt is meg a Chat programban,hogy a fels˝ TextArea-t ne lehessenszerkeszteni, es hogy egyb˝ l az alsoTextArea kapja meg az input fokuszt,amikor elindul a program, meg miuta nlenyomtuk a Send nyomogombot.

Feladat

ú Fejezzuk be a szé vegszerkeszt˝ programot!A Load es Save nyomogombhoz rendeljunke rtelemszerÁ esemenykezel˝ ket. A fa jlnevetvegyuk a TextField-b˝ l. A kilepesre isadjunk lehet˝ seget.

Loka lis va ltozok ele resebea gyazott oszta lyokbol

ú Az el˝ z˝ feladat sora n a komponenseketadattagkent vettuk fel

ú Eleg, ha loka lis va ltozokö az esemenykezelese rt felel˝ s nevtelen

oszta lyokbol ıgy is ele rhet˝ kú Ilyenkor final modosıtoszoval kell deklara lni˝ ket

ú Proba ld ki!

PDF created with FinePrint pdfFactory trial version http://www.fineprint.com

Page 18: aloi feluletek Java Foundation Classes - JFCaszt.inf.elte.hu/~kto/teaching/java/pdf/12_awt_c.pdf9 Az elhelyezes sorrendje es modja ú Ha van, akit eszakra tettek, a BorderLayout elhelyez˝

18

...public class SzovegSzerkeszto extends Frame { TextArea ta = new TextArea(); TextField tf = new TextField(); Button load = new Button("Load"), save = new Button("Save"); public SzovegSzerkeszto(){ ... save.addActionListener( new ActionListener(){ public void actionPerformed( ActionEvent e ){ try { PrintWriter w = new PrintWriter( new FileWriter(tf.getText()) ); w.print(ta.getText()); w.close(); } catch( IOException ioe ){ System.err.println("Sikertelen mentes!"); } } } ); } ...}

...public class SzovegSzerkeszto extends Frame { public SzovegSzerkeszto(){ final TextArea ta = new TextArea(); final TextField tf = new TextField(); Button load = new Button("Load"), save = new Button("Save"); ... save.addActionListener( new ActionListener(){ public void actionPerformed( ActionEvent e ){ try { PrintWriter w = new PrintWriter( new FileWriter(tf.getText()) ); w.print(ta.getText()); w.close(); } catch( IOException ioe ){ System.err.println("Sikertelen mentes!"); } } } ); } ...}

Ugyanaz a figyel˝ té bb forra shozú Ugyanaz a figyel˝ té bb forra shoz is

hozza rendelhet˝ú Ba rmelyik forra sban fellep az esemeny, a

figyel˝ megfelel˝ metodusa vegrehajtodikú Az a tadott esemeny objektum informa ciot

hordozú Pe lda ul azt, hogy melyik forra sbol sza rmazik:getSource() metodus

public void actionPerformed(ActionEvent e){ if( e.getSource() == ... ) ...

Feladat

ú A szé vegszerkeszt˝ programban anyomogombok lekezelese t ne nevtelenoszta llyal valosıtsuk meg, hanem a Framekapja meg az esemenyeket. Dé ntsé n agetSource() alapja n arrol, hogy mit kellcsina lnia.

Java tutorial

Copyright • 2000-2002, Kozsik Tama s

Menukú Minden Frame objektumhoz hozza kapcsolhato

(legfeljebb egy) menusor: MenuBarú A menusorba menuket lehet felvenni: Menuú A menuk menupontokat tartalmazhatnak:

MenuItemú A menupontok ké zé tt lehetnek specia lisak

ö elva laszto jelek (Separator)ö almenukö ki/bekacsolhatos menupontok (CheckboxMenuItem)

PDF created with FinePrint pdfFactory trial version http://www.fineprint.com

Page 19: aloi feluletek Java Foundation Classes - JFCaszt.inf.elte.hu/~kto/teaching/java/pdf/12_awt_c.pdf9 Az elhelyezes sorrendje es modja ú Ha van, akit eszakra tettek, a BorderLayout elhelyez˝

19

Menusor

ú Csak Frame-hez rendelhet˝ hozzaú Applethez pe lda ul nem!

ö Pop-up menuk haszna lhatok appletekne l is...ö Swing-ben ma r lehet appletekhez is menut

rendelni, ott sokkal té bb lehet˝ seg van...

MenuBar mb = new MenuBar();setMenuBar(mb);

Menuú A menuba rhoz lehet hozza venniMenu m = new Menu("File");mb.add(m);m = new Menu("Edit");mb.add(m);ú A help menu specia lisan kezelhet˝

ö ez bizonyos rendszereken a menusor jobb sze lenjelenik majd meg (Windows-on nem)

m = new Menu("Help");mb.setHelpMenu(m);

Menupontú A menukhé z lehet hozza venniMenuItem mi = new MenuItem("Load");m.add(mi);mi = new MenuItem("Save");m.add(mi)m.addSeparator();ú A menupontok szinten ActionEvent-eket

genera lnak, amikor kiva lasztja k ˝ ketmi.addActionListener( ... )

Feladatú Irjuk –jra a szé vegszerkeszt˝ programot –gy,

hogy ne nyomogombokkal, hanem menukkellehessen veze relni.

ú A menusor alatt csak egy TextArea legyenú Legyen File menu (Load, Save, elva laszto jel,

Exit), legyen Edit menu (ures) es legyen Helpmenu (szinten ures)

ú Egyel˝ re a Load es a Save ne csina ljonsemmit, de az Exit ma r mÁké djé n...

Java tutorial

Copyright • 2000-2002, Kozsik Tama s

Dialogus ablak

ú Kontener (Container)ú Kulé n ablakkent jelenik

meg (Window)ú Specia lis, el˝ re

elkeszıtett dialogusablaka FileDialog

ú Moda lis vagy sem

Component

Window

Dialog

FileDialog

Container

PDF created with FinePrint pdfFactory trial version http://www.fineprint.com

Page 20: aloi feluletek Java Foundation Classes - JFCaszt.inf.elte.hu/~kto/teaching/java/pdf/12_awt_c.pdf9 Az elhelyezes sorrendje es modja ú Ha van, akit eszakra tettek, a BorderLayout elhelyez˝

20

FileDialog haszna lataú A konstruktorral le trehozzuk - parame terkenta tadjuk a Frame-et, amihez kepest moda lis

ú Kiraka s el˝ tt bea llıtjuk, hogy Save vagy Loadú A show() metodussal kitesszukú Amikor Ok-t vagy Cancel-t nyomtak, eltÁnik,es megint a Frame-mel dolgozhatunk

ú A getFile() es getDirectory() metodussalleke rdezhet˝ a kiva lasztott fa jl es –tvonalö Cancel eseten a getFile() eredmenye null

Feladatú A szé vegszerkeszt˝ programban az elmenteni,

illetve beté lteni valo fa jl neve t egy FileDialogdialogusablakbol szerezzuk meg!

ú A FileDialog objektumot csak egyszer hozzukle tre, elta roljuk a szé vegszerkeszt˝ egyadattagja ban, es amikor kell, kitesszuk

ú A fa jl megnyita sa hoz egy java.io.File objektumothaszna lhatunk, ami egy fa jlnevet reprezenta l

ú A menupontok ké zé tti va laszta s az ActionEventgetActionCommand() metodusa val mehet

Java tutorial

Copyright • 2000-2002, Kozsik Tama s

Almenukú A menuk haszna lhatok menupontkent isú Igy lehet almenut keszıteni

public class Menu extends MenuItem

Menu m = new Menu("Edit");Menu am = new Menu("Settings");m.add(am);

CheckboxMenuItemú Kijelé l˝ s menuú ItemEvent genera lodik, ha kijelé likú Nem lehet CheckboxGroup-ba szervezni

ö "radio" jelleg nem lehet, mint a Checkbox-na lú Le lehet ke rdezni, hogy bekapcsolt a llapotban

van-e, vagy semMenu am = new Menu("Settings");CheckboxMenuItem mi =new CheckboxMenuItem("Monospaced font");

mi.addItemListener(...);am.add(mi);

Feladatú A szé vegszerkeszt˝ program Edit menujeben

helyezzunk el egy Settings almenut, amelyben -egyel˝ re - csak egy menupont legyen, amivelki/be kapcsolhatjuk, hogy monospaced fonttaljelenjen-e meg a TextArea tartalma

ú Haszna ld a java.awt.Font oszta lyt es a TextAreasetFont() metodusa t

ú Az ItemEvent getStateChange() metodusahasznos lehet

ú Ne ke rdezzuk le t–l kora n a TextArea fontja t!

PDF created with FinePrint pdfFactory trial version http://www.fineprint.com

Page 21: aloi feluletek Java Foundation Classes - JFCaszt.inf.elte.hu/~kto/teaching/java/pdf/12_awt_c.pdf9 Az elhelyezes sorrendje es modja ú Ha van, akit eszakra tettek, a BorderLayout elhelyez˝

21

Java tutorial

Copyright • 2000-2002, Kozsik Tama s

Clipboard haszna lataú Saja t is definia lhato, de ele rhet˝ a programok

ké zé tti, ké zé s va golap isgetToolkit().getSystemClipboard();

ú A TextArea automatikusan kezeliPl. Windows alatt Ctrl-X, Ctrl-C, Ctrl-V

ú Stringek a tvitele re jol haszna lhato:

String str = (String)clipboard.getContents(null). getTransferData(DataFlavor.stringFlavor);

StringSelection ss = new StringSelection(str);clipboard.setContents(ss,ss);

ú java.awt.datatransfer, Transferable, Clipboard

Feladatú Egeszıtsuk ki a szé vegszerkeszt˝ programot

Cut, Copy es Paste menupontokkal, melyek aprogramok ké zé tti va golapot kezelik!

ú Vigya zat: valamilyen misztikus ok miatt azels˝ nem, csak a ma sodik mÁké dik majd jol

//String str = ta.getSelectedText();String str =new String(ta.getSelectedText());

StringSelection ss = new StringSelection(str);

Tova bbi lehet˝ segekre pe ldaú Kurzor bea llıta sa

ö Component oszta lyban setCursor(Cursor)� new Cursor( Cursor.HAND_CURSOR )

ú Ikon bea llıta saö Frame oszta lyban setIconImage(Image)� toolkit.createImage(fajlnev)

ú Szın bea llıta saö Component oszta lyban setForeground(Color)es setBackground(Color)

� Color.red new Color(140,180,200)

Feladat

ú A Chat programban az also TextAreaha tte rszıne legyen fekete, a betÁk szınelegyen sa rga.

ú A Send nyomogomb felett a kurzor legyenkez alak–.

ú Haszna ljuk a chat.gif fa jlt a Chat programikonjakent.

Rajzola s

ú A Component oszta lyban paint() metoduspublic void paint( Graphics g )

ú Megadja, hogy hogyan rajzolodjon ki akomponens

ú Ezt feluldefinia lva rajzolhatunkú A Graphics objektumon keresztulú Jellemz˝ pe lda: Applet vagy Canvas

PDF created with FinePrint pdfFactory trial version http://www.fineprint.com

Page 22: aloi feluletek Java Foundation Classes - JFCaszt.inf.elte.hu/~kto/teaching/java/pdf/12_awt_c.pdf9 Az elhelyezes sorrendje es modja ú Ha van, akit eszakra tettek, a BorderLayout elhelyez˝

22

Pe ldaimport java.awt.*;class Vonal extends Frame { public void paint( Graphics g ){ g.drawLine(20,30,40,50); } public static void main(String args[]){ Frame f = new Vonal(); f.setSize(100,200); f.setVisible(true); }}

Java tutorial

Copyright • 2000-2002, Kozsik Tama s

Graphics

ú A komponens la thato resze t reprezenta ljaú Keperny˝ pontok ma trixaú A komponens bal fels˝ sarka a 0,0

koordina ta j– pont, ehhez kepest lehetpozıciona lni

Vonalak, teglalapok, ellipszisekú A Graphics oszta lyban definia lt mÁveletek

void drawLine(int x1, int y1, int x2, int y2)void drawRect(int x, int y, int width, int height)void drawOval(int x, int y, int width, int height)

ú Ugyanezek kité ltessel

void fillRect(int x, int y, int width, int height)void fillOval(int x, int y, int width, int height)

Trukké sebb dolgokú Bonyolultabb alakzatok (draw es fill)void drawPolygon(int[] xPoints, int[] yPoints,

int nPoints)void drawRoundRect(int x, int y, int width, int height,

int arcWidth, int arcHeight)void draw3DRect(int x, int y, int width, int height,

boolean raised)void drawArc(int x, int y, int width, int height,

int startAngle, int arcAngle)

ú Kepek, szé vegekvoid drawString(String str, int x, int y)void drawImage(Image i, int x, int y, ImageObserver o)

Bea llıta sok

ú A rajzola s el˝ tt bea llıthatoö a rajzola s szıne

graphics.setColor(Color)ö a haszna lt font (drawString)

graphics.setFont(Font)

PDF created with FinePrint pdfFactory trial version http://www.fineprint.com

Page 23: aloi feluletek Java Foundation Classes - JFCaszt.inf.elte.hu/~kto/teaching/java/pdf/12_awt_c.pdf9 Az elhelyezes sorrendje es modja ú Ha van, akit eszakra tettek, a BorderLayout elhelyez˝

23

Teglalapok, ellipszisek me rete

ú Ha egy 10 x 10 -es negyzetet akarunkrajzolni, akkor

g.drawRect(0,0,9,9)ö mert a 9 azt jelenti, hogy 9-szer jobbra/lefele

kell menniú Ha viszont kité lté tt alakzatot csina lunk,

akkor nem kell egyet levonni

Feladat

ú Rajzolj pa lcikaemberke t.

ú Definia ld felul a Frame paint metodusa t

Mire rajzoljunk?

ú Jellemz˝ , hogy egy Applet egy rajzoltkomponens

ú Ha egy alkalmaza sban/appletben csak egykomponens az, ami rajzolt, akkor azt akomponenst va lasszuk Canvas-nek

Feladat

ú Az emberkes programot alakıtsuk –gy ki,hogy alul legyen egy nyomogomb.

ú A rajzot egy Canvas objektumon helyezzukel...

Java tutorial

Copyright • 2000-2002, Kozsik Tama s

Ha va ltoztatni akarunk a rajzon

ú A komponens automatikusan –jrarajzolodik,ha elveszunk el˝ le valamit, ami eddig egyresze t eltakartaö vagy pl. ha ikoniza lt a llapotbol visszahozzuk

ú Ilyenkor a paint() maga tol meghıvodikú Ha mi akarunk valamit va ltoztatni, es eze rt–jra akarjuk rajzolni a kepet, ne a paint()metodust hıvjuk, hanem a repaint()-et

PDF created with FinePrint pdfFactory trial version http://www.fineprint.com

Page 24: aloi feluletek Java Foundation Classes - JFCaszt.inf.elte.hu/~kto/teaching/java/pdf/12_awt_c.pdf9 Az elhelyezes sorrendje es modja ú Ha van, akit eszakra tettek, a BorderLayout elhelyez˝

24

repaint()

public void repaint()

ú Ez leté rli a komponensunk kepe t, majdmeghıvja a paint()-et

ú Egesz pontosan a repaint() az update()-ethıvja, az té rli le a komponenst es hıvja meg apaint()-etö ha nem akarunk té ré lni, vagy offscreen rajzola st

akarunk csina lni, akkor itt lehet ké zbeavatkozni

Feladat

ú Az emberkes programban a Fel/Lenyomogomb egy logikai va ltozotbillentgessen. A Canvas objektumunkban apaint() ett˝ l a logikai va ltozotol fugg˝ en azemberke keze t felfele vagy lefele rajzoljameg

ú Teha t a nyomogomb hata sa ra az emberkemozgatja majd a keze t

Graphics2Dú Amit a paint megkap, az nem egyszerÁen egy

Graphics, hanem egy Graphics2Dú Ez a Graphics lesza rmazottjaú Sokkal té bbet tud

ö forgata s, eltola s, stb...ú Nyugodtan konverta ljuk...

public void paint( Graphics g ){ ((Graphics2D)g).rotate(0.42); ...

Feladat

ú Az emberke elforgatva es eltolva jelenjenmeg...

Platform-fugg˝ informa ciok

ú A Toolkit objektumon keresztulgetToolkit().getFontList()

getToolkit().getScreenSize()ú Nem csak a komponenseken keresztul

juthatunk hozza Toolkit objektumhozToolkit.getDefaultToolkit()

Feladat

ú A szé vegszerkeszt˝ program kezdetbenfoglalja el az egesz keperny˝ t.

PDF created with FinePrint pdfFactory trial version http://www.fineprint.com