Java tutorial Grafikus felhaszna loi feluletek
Copyright • 2000-2002, Kozsik Tama s
Grafikus felhaszna loi feluletek ú A felhaszna lo a programmal –gy tartja a kapcsolatot, hogy ö egeret h–zogat ö menupontokbol va logat ö gombokat nyomogat ö lista kban kijelé lget ö ...
Abstract Windowing Toolkit - AWT ú Ablakozo rendszer ú Egyse ges lehet˝ se gek minden platformon ö Motif, Windows, MacOS, ... ö A kulé nfe le rendszerek lehet˝ se geinek metszete ö Picit fapados...(?)
ú java.awt csomag, valamint alcsomagok ö java.awt.color, java.awt.event, java.awt.font, ...
Java Foundation Classes - JFC ú Abstract Windowing Toolkit - AWT ö ablakozo rendszer
ú ú ú ú ú
Swing Accessability Drag-and-drop Java2D Pluggable Look-And-Feel
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); } }
ú Ugyanaz a program minden platformon fut
1 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
Frame ú Egy keret, f˝ program-ke perny˝ ú Alapvet˝ funkcionalita s ö mozgathato ö a tme retezhet˝ (a sarka na l fogva) ö ikoniza lhato, visszaa llıthato ö opciona lis cımsor
Hogyan ırjunk programot a tanfolyamon import java.awt.*; class Hello extends Frame { public static void main(String args[]){ Hello hello = new Hello(); hello.setSize(100,200); hello.setVisible(true); } }
ú Sok minden hia nyzik me g ö pe lda ul beza ra s
Hogyan ırjunk programot a tanfolyamon 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ımke k, 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 te maké rbe tartoznak
A komponensek kiproba la sa ú Ve gigproba ljuk a komponenseket ú Nagyja bol ugyan–gy ne znek ki e s mÁké dnek minden platformon ú Az eddigi programban a konstruktor té rzse be tesszuk a komponensek le trehoza sa t ú Piszka lni ma r lehet a komponenseket, de a programunkat me g nem ke szıtjuk fel arra, hogy csina ljanak valamit is
Java tutorial Copyright • 2000-2002, Kozsik Tama s
2 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
A komponensek: Label import 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é ze pre igazıtott szé veggel import 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); } }
A komponensek: Button Java tutorial Copyright • 2000-2002, Kozsik Tama s
import 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: Checkbox
A komponensek: TextField
import 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); } }
import 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); } }
3 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
A komponensek: TextArea
A komponensek: List
import 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); } }
import 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)
A komponensek: Choice
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[]){...} }
import 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[]){...} }
Konte ner (Container) Java tutorial Copyright • 2000-2002, Kozsik Tama s
ú Komponenseket tartalmazhat ú A konte nerek is komponensek ú A konte nerek tova bbi konte nereket tartalmazhatnak: egyma sba a gyaza s ú A Frame is egy konte ner ú Egy ma sik gyakran haszna lt: Panel ö Egyebek: Window, Dialog, ScrollPane, Applet
ú Egyuve tartozo ke perny˝ elemek é sszefoga sa ra
4 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
A konte ner terveze si minta (Container design pattern) Component
Java tutorial Copyright • 2000-2002, Kozsik Tama s
Container
Panel ú Egy konte ner (egyben komponens) ú Igaza ndibol nem is la tszik, hogy ott van
Panel, mint konte ner import 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[]){...} }
Panel, mint komponens import 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); } }
Komponensek elhelyeze se ú Eddig csak le trehoztuk a komponenseket e s belepakoltuk egy konte nerbe ú Nem mondtuk meg, hogy mekkora legyen, e s hova keruljé n ú A tme reteze sne l automatikusan va ltoztak/mozogtak a komponensek
5 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
Explicit elhelyeze s ú Egy felhaszna loi felulet elke szıte se ne l az egyik legnehezebb feladat az elhelyeze s... ú ... Aminek nagy re sze az a tme reteze s ké vete se ú 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 az elhelyeze s re szleteivel ú Magas szinten (kell˝ en absztrakt nyelven) fogalmazhatja meg az ige nyeit ö mi hova keruljé n ö mi mekkora legyen
ú Nem ké telez˝ Layout Manager-t haszna lni, de te nyleg ké nnyebb azzal...
Layout manager elhelyeze si strate gia ú Egy konte neren belul hogyan kell a komponenseket elhelyezni ú Té bb predefinit LM haszna lhato ö BorderLayout ö FlowLayout ö GridLayout ö CardLayout ö GridBagLayout (ehhez ma r gyakorlat kell) ö egye b (la sd Swing)
Java tutorial Copyright • 2000-2002, Kozsik Tama s
ú Irhatunk saja tot is (ehhez nagy gyakorlat kell)
FlowLayout ú A komponenseket folyamatosan kell elhelyezni ú Meg kell ke rdezni a komponensekt˝ l, hogy mekkora k ”szeretne nek lenniÉ ú Amıg fe rnek egyma s melle ... ú Ha nem, akkor ké vetkez˝ sorban folytatni
FlowLayout - Panel ú A Panel konte nerekben az alape rtelmezett Layout Manager a FlowLayout ú A pe lda nk is ilyet mutatott be ú Figyeljuk meg, hogyan viselkedik a tme reteze sne l
ö alape rtelmeze sben ké ze pre igazıtva a sorban
ú Ami sehogy sem fe r, az nem jelenik meg rendesen
6 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
Frame - FlowLayout? ú A Frame konte nerekne l az alape rtelmezett nem a FlowLayout ú De ott is be lehet a llıtani, hogy egy bizonyos Frame objektumnak az legyen a Layout Manager-e setLayout(new FlowLayout());
Frame, de nem FlowLayout import 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 + FlowLayout import 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
NORTH
ú A konte ner sze le hez té rte n˝ igazıta s ú Elhelyeze s az e gta jaknak megfelel˝ en ú Legfeljebb é t komponens helyezhet˝ el WEST
CENTER
EAST
NORTH
WEST
CENTER
SOUTH
EAST SOUTH
7 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
NORTH WEST WEST
CENTER
SOUTH
WEST
CENTER
EAST
EAST
CENTER
SOUTH
SOUTH
WEST
SOUTH
Pe lda ul é t nyomogomb Java tutorial Copyright • 2000-2002, Kozsik Tama s
import 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[]){...} }
8 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
Az elhelyeze s sorrendje e s modja
Az elhelyeze s sorrendje e s modja
ú Ha van, akit e szakra tettek, a BorderLayout elhelyez˝ objektum leke rdezi, milyen magas szeretne lenni, e s olyan magas lesz, e szakon ú Sze lte ben meg akkora, hogy kité ltse a konte nert
ú Ha van, akit e szakra tettek, a BorderLayout elhelyez˝ objektum leke rdezi, milyen magas szeretne lenni, e s olyan magas lesz, e szakon ú Sze lte ben meg akkora, hogy kité ltse a konte nert
NORTH
NORTH
Pe lda ul egy nyomogombna l a felirata hata rozza meg, hogy mekkora szeretne lenni
Az elhelyeze s sorrendje e s modja ú Ha van, akit de lre tettek, ugyanezen strate gia val lesz elhelyezve, csak de len ú Tegyuk fel, hogy most nincs senki de len:
Az elhelyeze s sorrendje e s modja ú Ha van, akit nyugatra tettek, leke rdezzuk, milyen sze les szeretne lenni, e s olyan lesz ú A magassa ga: amilyen magas csak lehet az e szak e s de l figyelembe ve tele vel
NORTH
NORTH
WEST
SOUTH
Az elhelyeze s sorrendje e s modja
Az elhelyeze s sorrendje e s modja ú Ve gul a ké ze pre tett komponens, ha van olyan, akkor kité lti a rendelkeze sre a llo marade k teruletet.
ú Ha van, akit keletre tettek, ugyanezzel a strate gia val lesz elhelyezve, csak keletre
NORTH
WEST
NORTH
EAST
WEST
CENTER
EAST
9 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
Az elhelyeze s sorrendje e s modja ú Ve gul a ké ze pre tett komponens, ha van olyan, akkor kité lti a rendelkeze sre a llo marade k teruletet. ú 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 konte nerne 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 programra import 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[]){...} }
Java tutorial Copyright • 2000-2002, Kozsik Tama s
ú Az egy parame teres add() a CENTER-be tesz
Grid Layout Manager ú Ha ugyanakkora komponenseket akarok elhelyezni egy franciakocka s ra csban setLayout( new GridLayout(3,0) );
ú Meg kell adni, hogy a ra csnak ha ny sora vagy ha 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 a ma sodiknak kell pozitıvnak lennie, e s ez a kialakıtando oszlopok sza ma t adja meg setLayout( new GridLayout(3,0) ); setLayout( new GridLayout(3,4) ); setLayout( new GridLayout(3,1000) );
10 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
Feladat Java tutorial Copyright • 2000-2002, Kozsik Tama s
Bonyolultabb ke perny˝ ke p
ú Ke szıtsunk nyomogombokbol egy telefonbillentyÁzetet, amin 12 gomb tala lhato: a sza mok 1-t˝ l 9-ig, valamint a * 0 # karakterek. Minden gomb legyen ugyanakkora, e s legyenek egy 4 soros e s ha rom oszlopos ra csban!
Proble ma
TextArea
Megolda s: Konte nerek e s Layout Manager-ek egyma sba a gyaza sa
Panel p1 Frame BorderLayout
Panel p1 BorderLayout
Panel p2 Panel p2 GridLayout
A megoldo programkod import 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); } }
11 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
Feladat ú Proba ljuk ki az el˝ bbi programot, de kis modosıta sokkal: ırjunk egy egyszerÁ szé vegszerkeszt˝ programot ö A ke t nyomogomb: Save e s Load legyen ö Legyen egy TextField is, amibe a szerkesztend˝ fa jlnevet kell megadni. Ezt egy cımke jelezze el˝ tte.
Filename:
Save
Feladat ú Tervezzunk meg egy Chat programot, melyben egyma s alatt ke t, egyforma me retÁ TextArea tala lhato, valamint alattuk egy, az ablak sze lesse ge t felvev˝ , ”SendÉ felirat– nyomogomb.
Load
Ha zi feladat ú A telefonos programunkat alakıtsuk –gy a t, hogy a Frame-en belul a telefonos panel mindig a bal fels˝ sarokban helyezkedjen el, e s mindig ugyanakkora legyen. (Amekkora szeretne lenni...) ú Figyeljuk meg, hogy hogyan viselkedik a telefonos panel, ha ege sz kicsire vesszuk le az ablakot!
Copyright • 2000-2002, Kozsik Tama s
Csina ljon ve gre valamit a program...
Mi té rte njen, ha...
ú Rendeljunk funkcionalita st a feluletelemekhez ú Specifika ljuk, hogy mi té rte njen, amikor valaki piszka l egy feluletelemet ú Eseme ny-orienta lt szemle let ú Ma s nyelvekben / ablakozo rendszerekben gyakran: call-back elja ra sok
Java tutorial
ú Hagyoma nyos eseme nymodell ö A komponens eldé nti, hogy mit akar csina lni, ha ˝ t megpiszka lta k ö Ha me gsem, akkor e rtesıti az ˝ t tartalmazo konte nert ö E s ıgy tova bb... ö Java 1.0
ú U j, fejlettebb eseme nymodell: Java 1.1-to l
12 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
Eseme nymodell ú Eseme ny forra sa: amivel té rte nhet valami
Java tutorial
ö pe lda ul egy feluletelem, pe lda ul egy nyomogomb
ú Eseme ny: ami té rte nt Copyright • 2000-2002, Kozsik Tama s
ö pe lda ul lenyomta k
ú Figyel˝ : ami reaga lni tud az eseme nyre ö tartalmazza a kodot, amit ve gre kell hajtani
A re sztvev˝ k
A re sztvev˝ k
Ké rnyezeti hata s
Forra s (Source)
Eseme ny (Event)
Figyel˝ (Listener)
Forra s (Source)
Figyel˝ (Listener)
Eseme ny (Event)
Figyel˝ (Listener) Figyel˝ (Listener)
A re sztvev˝ k
Forra s (Source)
Eseme ny (Event)
Figyel˝ (Listener)
AWT-s pe lda A program haszna loja lenyomja
Figyel˝ (Listener)
Elmentjuk a fa jlt Lenyomtak!
Forra s (Source)
Eseme ny (Event)
Figyel˝ (Listener)
nyomogomb
Figyel˝ (Listener)
Egy menupontot kiszurkıtunk ...
13 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
Ezek csak szerepek! A program haszna loja
A szerepl˝ k tıpusa A program haszna loja
lenyomja
lenyomja Elmentjuk a fa jlt
ActionListener
Lenyomtak!
ActionEvent Egy menupontot kiszurkıtunk
nyomogomb
Button
ActionListener
...
ActionListener
Sokfe le re sztvev˝ van
A kapcsolat felve tele
A program haszna loja
egy interfe sz ikoniza lja
ActionListener WindowListener
WindowEvent Window
Regisztra cio
WindowListener
Button
WindowListener
public void addActionListener(ActionListener l) public void removeActionListener(ActionListener l)
A kapcsolat felve tele
Eseme ny eljuttata sa A program haszna loja
egy interfe sz
lenyomja
ActionListener ActionListener
ActionListener ActionEvent
Button
Regisztra cio
public void addActionListener(ActionListener l) public void removeActionListener(ActionListener l)
Button
ActionListener public void actionPerformed(ActionEvent e)
14 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
Eseme ny lekezele se A program haszna loja lenyomja
Java tutorial ActionListener
Copyright • 2000-2002, Kozsik Tama s
ActionEvent Button
ActionListener public void actionPerformed(ActionEvent e) { ... }
Feladat ú Irjunk eseme nykezel˝ oszta lyt, e s egy pe lda nya t kapcsoljuk hozza Chat program Send nyomogombja hoz. A figyel˝ reakcioja az legyen, hogy kiırja a szabva nyos kimenetre, hogy lenyomta k az a ltala figyelt gombot. ú Haszna ld a java.awt.event csomagot! ú Proba lj meg le trehozni e s a nyomogombhoz kapcsolni ke t pe lda nyt a figyel˝ oszta lybol
Feladat ú Lehet maga a Chat program is egy figyel˝ . Csina lja azt, hogy az also TextArea tartalma t hozza fÁzi a fels˝ e hez, e s 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 is megmaradjanak (hogy minden metodusbol haszna lhassuk ˝ ket)
ú Azta n id˝ vel a ke t ma sik figyel˝ t ki is lehet a m venni... :-)
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() );
Kulé na llo oszta ly ú Sok esetben ke nyelmes, ha az eseme nykezel˝ t nem kulé na llo oszta lyke nt valosıtjuk meg ú Direkt hozza fe re s szukse ges a komponensekhez ú Van, amikor az sem ke nyelmes, ha a Framebe tesszuk az eseme nykezele st ú Bea gyazott oszta lyok segıtenek majd...
15 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
Feladat ú Irjuk meg a Chat programot –gy, hogy az eseme nykezele s kulé n oszta lyban legyen. ú A szukse ges informa ciokat el kell juttatni az eseme nykezele st ve gz˝ objektumhoz...
Bea gyazott oszta lyok ú A bea gyazott oszta lyok segıtse ge vel ke nyelmesebb ú Ne vtelen oszta lyok ú Az informa cio megfelel˝ helyre té rte n˝ eljuttata sa val nem kell foglalkozni
Feladat ú Ird meg a Chat programot –gy, hogy ne vtelen oszta lyt haszna lsz az eseme nykezele shez!
Java tutorial Copyright • 2000-2002, Kozsik Tama s
Ma s eseme nyek ú WindowEvent, KeyEvent, ItemEvent, MouseEvent, MouseMotionEvent, ComponentEvent, ContainerEvent, stb. ú Minden komponensne l kitala lhato, hogy milyen eseme nyt tud kiva ltani ö add*Listener
(addWindowListener, addKeyListener)
ú Ablak becsuka sa: WindowEvent
WindowEvent, WindowListener ú WindowEvent: az ablakokkal kapcsolatos eseme nyek é sszefoglalo neve ú WindowListener ö windowActivated( WindowEvent e ) ö windowDeactivated( WindowEvent e ) ö windowOpened( WindowEvent e ) ö windowClosed( WindowEvent e ) ö windowClosing( WindowEvent e ) ö windowIconified( WindowEvent e ) ö windowDeiconified( WindowEvent e )
16 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
(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, e s ami kell, feluldefinia ljuk, a té bbit é ré ké ljuk
Feladat ú A Chat programot ege szıtsuk ki –gy, hogy ki lehessen bel˝ le le pni. ú System.exit(0); ú Figyelem! Hibaforra s: ha rosszul ırjuk be a windowClosing neve t vagy parame tereze se t, a fordıto nem fog szolni, mert é ré kl˝ dik az ures té rzsÁ metodus...
Feladat ú Fejezzuk be a szé vegszerkeszt˝ programot! A Load e s Save nyomogombhoz rendeljunk e rtelemszerÁ eseme nykezel˝ ket. A fa jlnevet vegyuk a TextField-b˝ l. A kile pe sre is adjunk lehet˝ se get.
Java tutorial Copyright • 2000-2002, Kozsik Tama s
Feladat ú Csina ljuk azt is meg a Chat programban, hogy a fels˝ TextArea-t ne lehessen szerkeszteni, e s hogy egyb˝ l az also TextArea kapja meg az input fokuszt, amikor elindul a program, meg miuta n lenyomtuk a Send nyomogombot.
Loka lis va ltozok ele re se bea gyazott oszta lyokbol ú Az el˝ z˝ feladat sora n a komponenseket adattagke nt vettuk fel ú Ele g, ha loka lis va ltozok ö az eseme nykezele se rt felel˝ s ne vtelen oszta lyokbol ıgy is ele rhet˝ k
ú Ilyenkor final modosıtoszoval kell deklara lni ˝ ket ú Proba ld ki!
17 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
... 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!"); } } } ); } ... }
Ugyanaz a figyel˝ té bb forra shoz ú Ugyanaz a figyel˝ té bb forra shoz is hozza rendelhet˝ ú Ba rmelyik forra sban felle p az eseme ny, a figyel˝ megfelel˝ metodusa ve grehajtodik ú Az a tadott eseme ny objektum informa ciot hordoz ú Pe lda ul azt, hogy melyik forra sbol sza rmazik: getSource() metodus
... 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!"); } } } ); } ... }
Feladat ú A szé vegszerkeszt˝ programban a nyomogombok lekezele se t ne ne vtelen oszta llyal valosıtsuk meg, hanem a Frame kapja meg az eseme nyeket. Dé ntsé n a getSource() alapja n arrol, hogy mit kell csina lnia.
public void actionPerformed(ActionEvent e){ if( e.getSource() == ... ) ...
Menuk Java tutorial Copyright • 2000-2002, Kozsik Tama s
ú 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)
18 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
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˝ se g van...
MenuBar mb = new MenuBar(); setMenuBar(mb);
Menupont ú A menukhé z lehet hozza venni MenuItem mi = new MenuItem("Load"); m.add(mi); mi = new MenuItem("Save"); m.add(mi) m.addSeparator();
ú A menupontok szinte n ActionEvent-eket genera lnak, amikor kiva lasztja k ˝ ket mi.addActionListener( ... )
Menu ú A menuba rhoz lehet hozza venni Menu m = new Menu("File"); mb.add(m); m = new Menu("Edit"); mb.add(m); ú A help menuspecia lisan kezelhet˝ ö ez bizonyos rendszereken a menusor jobb sze le n jelenik majd meg (Windows-on nem)
m = new Menu("Help"); mb.setHelpMenu(m);
Feladat ú Irjuk –jra a szé vegszerkeszt˝ programot –gy, hogy ne nyomogombokkal, hanem menukkel lehessen veze relni. ú A menusor alatt csak egy TextArea legyen ú Legyen File menu(Load, Save, elva laszto jel, Exit), legyen Edit menu(ures) e s legyen Help menu(szinte n ures) ú Egyel˝ re a Load e s a Save ne csina ljon semmit, de az Exit ma r mÁké djé n...
Dialogus ablak Java tutorial Copyright • 2000-2002, Kozsik Tama s
ú Konte ner (Container) ú Kulé n ablakke nt jelenik meg (Window) ú Specia lis, el˝ re elke szıtett dialogusablak a FileDialog ú Moda lis vagy sem
Component
Container
Window
Dialog
FileDialog
19 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
FileDialog haszna lata ú A konstruktorral le trehozzuk - parame terke nt a tadjuk a Frame-et, amihez ke pest 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, e s megint a Frame-mel dolgozhatunk ú A getFile() e s getDirectory() metodussal leke rdezhet˝ a kiva lasztott fa jl e s –tvonal ö Cancel esete n a getFile() eredme nye null
Feladat ú A szé vegszerkeszt˝ programban az elmenteni, illetve beté lteni valo fa jl neve t egy FileDialog dialogusablakbol szerezzuk meg! ú A FileDialog objektumot csak egyszer hozzuk le tre, elta roljuk a szé vegszerkeszt˝ egy adattagja ban, e s amikor kell, kitesszuk ú A fa jl megnyita sa hoz egy java.io.File objektumot haszna lhatunk, ami egy fa jlnevet reprezenta l ú A menupontok ké zé tti va laszta s az ActionEvent getActionCommand() metodusa val mehet
Almenuk Java tutorial Copyright • 2000-2002, Kozsik Tama s
ú A menuk haszna lhatok menupontke nt is ú Igy lehet almenut ke szı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 sem Menu am = new Menu("Settings"); CheckboxMenuItem mi = new CheckboxMenuItem("Monospaced font"); mi.addItemListener(...); am.add(mi);
Feladat ú A szé vegszerkeszt˝ program Edit menuje ben helyezzunk el egy Settings almenut, amelyben egyel˝ re - csak egy menupont legyen, amivel ki/be kapcsolhatjuk, hogy monospaced fonttal jelenjen-e meg a TextArea tartalma ú Haszna ld a java.awt.Font oszta lyt e s a TextArea setFont() metodusa t ú Az ItemEvent getStateChange() metodusa hasznos lehet ú Ne ke rdezzuk le t–l kora n a TextArea fontja t!
20 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
Clipboard haszna lata ú Saja t is definia lhato, de ele rhet˝ a programok ké zé tti, ké zé s va golap is
Java tutorial Copyright • 2000-2002, Kozsik Tama s
getToolkit().getSystemClipboard();
ú A TextArea automatikusan kezeli Pl. 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 ú Ege szıtsuk ki a szé vegszerkeszt˝ programot Cut, Copy e s Paste menupontokkal, melyek a programok ké zé tti va golapot kezelik! ú Vigya zat: valamilyen misztikus ok miatt az els˝ 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˝ se gekre 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) e s setBackground(Color) Color.red
Feladat ú A Chat programban az also TextArea ha tte rszıne legyen fekete, a betÁk szıne legyen sa rga. ú A Send nyomogomb felett a kurzor legyen ke z alak–. ú Haszna ljuk a chat.gif fa jlt a Chat program ikonjake nt.
new Color(140,180,200)
Rajzola s ú A Component oszta lyban paint() metodus public void paint( Graphics g )
ú Megadja, hogy hogyan rajzolodjon ki a komponens ú Ezt feluldefinia lva rajzolhatunk ú A Graphics objektumon keresztul ú Jellemz˝ pe lda: Applet vagy Canvas
21 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
Pe lda import 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); } }
Graphics ú A komponens la thato re sze t reprezenta lja ú Ke perny˝ pontok ma trixa ú A komponens bal fels˝ sarka a 0,0 koordina ta j– pont, ehhez ke pest lehet pozıciona lni
Java tutorial Copyright • 2000-2002, Kozsik Tama s
Vonalak, te glalapok, 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é lte ssel 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 e s 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)
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)
ú Ke pek, szé vegek void drawString(String str, int x, int y) void drawImage(Image i, int x, int y, ImageObserver o)
22 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
Te glalapok, ellipszisek me rete ú Ha egy 10 x 10 -es ne gyzetet akarunk rajzolni, akkor g.drawRect(0,0,9,9)
Feladat ú Rajzolj pa lcikaemberke t.
ö 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
Mire rajzoljunk? ú Jellemz˝ , hogy egy Applet egy rajzolt komponens ú Ha egy alkalmaza sban/appletben csak egy komponens az, ami rajzolt, akkor azt a komponenst va lasszuk Canvas-nek
ú Definia ld felul a Frame paint metodusa t
Feladat ú Az emberke s programot alakıtsuk –gy ki, hogy alul legyen egy nyomogomb. ú A rajzot egy Canvas objektumon helyezzuk el...
Ha va ltoztatni akarunk a rajzon Java tutorial Copyright • 2000-2002, Kozsik Tama s
ú A komponens automatikusan –jrarajzolodik, ha elveszunk el˝ le valamit, ami eddig egy re sze t eltakarta ö vagy pl. ha ikoniza lt a llapotbol visszahozzuk
ú Ilyenkor a paint() maga tol meghıvodik ú Ha mi akarunk valamit va ltoztatni, e s eze rt –jra akarjuk rajzolni a ke pet, ne a paint() metodust hıvjuk, hanem a repaint()-et
23 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
repaint() public void repaint() ú Ez leté rli a komponensunk ke pe t, majd meghıvja a paint()-et ú Ege sz pontosan a repaint() az update()-et hıvja, az té rli le a komponenst e s hıvja meg a paint()-et ö ha nem akarunk té ré lni, vagy offscreen rajzola st akarunk csina lni, akkor itt lehet ké zbeavatkozni
Graphics2D ú Amit a paint megkap, az nem egyszerÁen egy Graphics, hanem egy Graphics2D ú Ez a Graphics lesza rmazottja ú Sokkal té bbet tud
Feladat ú Az emberke s programban a Fel/Le nyomogomb egy logikai va ltozot billentgessen. A Canvas objektumunkban a paint() ett˝ l a logikai va ltozotol fugg˝ en az emberke keze t felfele vagy lefele rajzolja meg ú Teha t a nyomogomb hata sa ra az emberke mozgatja majd a keze t
Feladat ú Az emberke elforgatva e s eltolva jelenjen meg...
ö forgata s, eltola s, stb...
ú Nyugodtan konverta ljuk... public void paint( Graphics g ){ ((Graphics2D)g).rotate(0.42); ...
Platform-fugg˝ informa ciok ú A Toolkit objektumon keresztul getToolkit().getFontList() getToolkit().getScreenSize()
Feladat ú A szé vegszerkeszt˝ program kezdetben foglalja el az ege sz ke perny˝ t.
ú Nem csak a komponenseken keresztul juthatunk hozza Toolkit objektumhoz Toolkit.getDefaultToolkit()
24 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com