Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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