Java tutorial Grafikus felhaszna loi feluletek



Hasonló dokumentumok
Grafikus felhasználói felületek. Abstract Window Toolkit, a java.awt és java.awt.event csomagok

VI. Grafikus Java alkalmazások

Programozási technológia

Grafikus felhasználói felületek. Dr. Szendrei Rudolf Informatikai Kar Eötvös Loránd Tudományegyetem. Programozási technológia I. Dr.

Grafikus felületek a programozó szempontjából grafikus elemek absztrakt reprezentációja az egyes elemek tulajdonságait leíró adatstruktúrák.

Java programozási nyelv 8. rész Grafikus felhasználói felület

Két csomag elemeiből lehet a felületet elkészíteni: awt: heavy weight komponensek; swing: light weight komponensek (időben később).

JAVA PROGRAMOZÁS 5.ELŐADÁS

Programozás III GRAFIKA RAJZOLÁS SWING FELÜLETEN RAJZOLÁS GRAFIKA HASZNÁLATA. Rajzolni az awt csomag Graphics osztályának metódusaival tudunk.

Eseménykezelés Java környezetben, AWT alapok

Szoftvertechnológia alapjai Java előadások

ZH mintapélda. Feladat. Felület

Grafikus felületek készítése 1.

PRECÍZ Információs füzetek

Swing. (A javax.swing csomag)

Adatbázis alapú rendszerek gyakorlat Adatbázis alapú alkalmazásfejlesztés Java, C# környezetben

Scherlein Márta Dr. Hajdu Sándor Köves Gabriella Novák Lászlóné MATEMATIKA 2. A FELMÉRŐ FELADATSOROK ÉRTÉKELÉSE

Java felhasználói felület

Java és web programozás

Programoza s I. 11. elo ada s Oszd meg e s uralkodj! elvu algoritmusok. Sergya n Szabolcs

Java grafikai lehetőségek

CLEAN-PRECÍZ Integrált ügyviteli rendszer. Őstermelői bevallás készítése

Java Programozás 5. Gy: Java alapok. Adatkezelő 1.rész

Java Programozás 11. Ea: MVC modell

Újdonságok. Release 2

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN

OOP: Java 8.Gy: Abstract osztályok, interfészek

Java Programozás 6. Gy: Java alapok. Adatkezelő 2.rész

VII. Az Al kot m ny b r s g el n k nek v g z se

BALATON szelet Nyerj vagy Nyerj!

Java felhasználói felület

Java tutorial. Csomagok. A program tagolasa. Alrendszerek kialakıtasa. Csomag. Alrendszerek kialakıtasa

Java Programozás 3. Gy: Java GUI. Swing, AWT

Analı zis elo ada sok

Vizuális programozás gyakorlat

Programozás II. labor

Java programozási nyelv 7. rész Java osztálykönyvtár 1.

strings.xml res/values/strings.xml fájlban hozzuk létre a hiányzó string adatforrásainkat A jelenlegi helyett ez álljon: <resources> <string

ETR Pénzügyi közönségszolgálat

Programoza s I. 10. elo ada s Rendezett to mbo k. Sergya n Szabolcs

OBJEKTUMORIENTÁLT TERVEZÉS ESETTANULMÁNYOK. 2.1 A feladat

A word első megnyitása

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

Java Programozás 4. Gy: Java GUI. Tipper, MVC kalkulátor

VII. Appletek, grafika

Szövegszerkesztés alapjai I.

RAP-4 ELEKTROMECHANIKUS SOROMPÓ

II. év. Adatbázisok és számítógépek programozása

A berendezkedés programja

FELHASZNÁLÓI KÉZIKÖNYV

GroupWise 5.2 használói jegyzet

Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges. Könyvtárhierarhiát fed: Pl.: java/util/scanner.java

Word 2010 magyar nyelvű változat

Objektumok és osztályok. Az objektumorientált programozás alapjai. Rajzolás tollal, festés ecsettel. A koordinátarendszer

3. gyakorlat. 1/7. oldal file: T:\Gyak-ArchiCAD19\EpInf3_gyak_19_doc\Gyak3_Ar.doc Utolsó módosítás: :57:26

JavaBeans. Java tutorial. Komponens-elvu programoza s. Off-the-shelf. Megoldas Java modra. O sszeszerele s

abkezel.java import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.sql.*; public class abkezel extends JFrame {

MAGYAR POSTA BEFEKTETÉSI ZRT. e-befektetés. Felhasználói kézikönyv

CIB Elektronikus Terminál

Tananyag, tartalom, tevékenység - minimum és optimum

Aronic Főkönyv kettős könyvviteli programrendszer

Felhasználói dokumentáció. a számviteli politika programhoz

JAVA SE/ME tanfolyam tematika

Destour Outdoor 2.0 felhasználói kézikönyv

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o

Informa cio k, Mo dszerek, O tletek e s Megolda sok a Precıź Integra lt U gyviteli Informa cio s rendszerhez. T31. Standolás

Programozási technológia

libgdx alapok, első alkalmazás

Poszeidon (EKEIDR) Irat és Dokumentumkezelő rendszer webes felület

Java Programozás 7. Gy: Java alapok. Adatkezelő 3.rész

Access adatbázis elérése OLE DB-n keresztül

Felkészülést segítő kérdések Gépszerkesztés alapjai tárgyból

Tartalomjegyzék. Bevezetés...2

KETTŐS KÖNYVELÉS PROGRAM CIVIL SZERVEZETEK RÉSZÉRE

Java Programozás 9. Gy: Java alapok. Adatkezelő 5.rész

Vényírás. 1. ábra. 1. oldal

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

FELHASZ ÁLÓI KÉZIKÖ YV. Számlázó programhoz

Objektumorientált programozás C# nyelven

Grafikus felhasználói felületek, eseménykezelés

OOP: Java 11.Gy: Enumok, beágyazott osztályok. 13/1 B ITv: MAN

A gyakorlat során az alábbi ábrán látható négy entitáshoz kapcsolódó adatbevitelt fogjuk megoldani.

1) Válasszuk ki az Beállítások/Rendszer beállítások menüpontot:

Java és web programozás

Hírlevél február. Fejleszte sek e s va ltoza sok a Precıź Integra lt U gyviteli Informa cio s rendszerben I.

Entity Framework alapú adatbáziselérés 2

Szoftvertechnolo gia gyakorlat

30. szám A MAGYAR KÖZTÁRSASÁG HIVATALOS LAPJA. Budapest, már ci us 17., péntek TARTALOMJEGYZÉK. Ára: 2047, Ft. Oldal

KELE3. Felhasználói kézikönyv

Tudáspróba Informatika felmérő feladatok

HATODIK FEJEZET / FÜGGİ MODELLEK / TANGRAM

Java és web programozás

Programoza s I. 13. elo ada s Moho algoritmusok. Sergya n Szabolcs

ábra 1 LabelPOINT 250 elektromos feliratozógép Címkekimeneti nyílás Vágóél LCD kijelző Bekapcsológomb

Java Programozás 8. Gy: Java alapok. Adatkezelő 4.rész

EN HD CD-ST VK.51.H4.47 Danfoss 05/

9. óra operációs rendszerek. Grafikus operációs rendszer

A Java nyelv. Dialógus ablakok. Elek Tibor

Welcome3 Bele pteto rendszer

PHP5 Új generáció (2. rész)

Átírás:

Grafikus felhaszna loi feluletek 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 ö... 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é nfele 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 program import java.awt.frame; class Ablak { public static void main(string args[]){ Frame f = new Frame(); f.setsize(100,200); f.setvisible(true); 1

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 ö pelda ul beza ra s Hogyan ırjunk programot a tanfolyamon public static void main(string args[]){ Hello hello = new Hello(); hello.setsize(100,200); hello.setvisible(true); Hogyan ırjunk programot a tanfolyamon 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 komponensek letrehoza sa t ú Piszka lni ma r lehet a komponenseket, de a programunkat meg nem keszıtjuk fel arra, hogy csina ljanak valamit is 2

A komponensek: Label 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é veggel 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 add(new Button("Hello")); public static void main(string args[]){ Hello hello = new Hello(); hello.setsize(100,200); hello.setvisible(true); A komponensek: Checkbox add(new Checkbox("Hello")); public static void main(string args[]){ Hello hello = new Hello(); hello.setsize(100,200); hello.setvisible(true); A komponensek: TextField add(new TextField("Hello")); public static void main(string args[]){ Hello hello = new Hello(); hello.setsize(100,200); hello.setvisible(true); 3

A komponensek: TextArea add(new TextArea("Hello")); public static void main(string args[]){ Hello hello = new Hello(); hello.setsize(100,200); hello.setvisible(true); A komponensek: List 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) 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: Choice Choice choice = new Choice(); choice.add("szia"); choice.add("hello"); choice.add("salut"); add(choice); public static void main(string args[]){... 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 ke perny elemek é sszefoga sa ra 4

A kontener tervezesi minta (Container design pattern) Component Container Panel ú Egy kontener (egyben komponens) ú Igaza ndibol nem is la tszik, hogy ott van Panel, mint komponens add(new Panel()); public static void main(string args[]){ Hello hello = new Hello(); hello.setsize(100,200); hello.setvisible(true); Panel, mint kontener 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 letrehoztuk a komponenseket es belepakoltuk egy kontenerbe ú Nem mondtuk meg, hogy mekkora legyen, es hova keruljé n ú A tme reteze sne l automatikusan va ltoztak/mozogtak a komponensek 5

Explicit elhelyezes ú Egy felhaszna loi felulet elkeszıtesenel az egyik legnehezebb feladat az elhelyezes... ú... Aminek nagy resze az a tmeretezes 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 az elhelyeze s re szleteivel ú 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 - elhelyeze si strate gia ú Egy konteneren belul hogyan kell a komponenseket 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) FlowLayout ú A komponenseket folyamatosan kell elhelyezni ú Meg kell kerdezni a komponensekt l, hogy mekkora k szeretnenek lennié ú Amıg fernek egyma s melle... ú Ha nem, akkor ké vetkez sorban folytatni ö alapertelmezesben ké zepre igazıtva a sorban ú Ami sehogy sem fer, az nem jelenik meg rendesen FlowLayout - Panel ú A Panel kontenerekben az alapertelmezett Layout Manager a FlowLayout ú A pelda nk is ilyet mutatott be ú Figyeljuk meg, hogyan viselkedik a tmeretezesnel 6

Frame - FlowLayout? ú A Frame kontenereknel az alapertelmezett 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 add(new Button("Szia")); add(new Button("Hello")); add(new Button("Salut")); public static void main(string args[]){... Frame + FlowLayout setlayout(new FlowLayout()); add(new Button("Szia")); add(new Button("Hello")); add(new Button("Salut")); public static void main(string args[]){... Border Layout NORTH ú A kontener szelehez té rten igazıta s ú Elhelyezes az e gta jaknak megfelel en ú Legfeljebb é t komponens helyezhet el NORTH WEST CENTER EAST WEST CENTER EAST SOUTH SOUTH 7

NORTH WEST CENTER EAST WEST CENTER EAST SOUTH SOUTH WEST CENTER WEST SOUTH SOUTH Pelda ul é t nyomogomb 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

Az elhelyezes sorrendje es modja ú Ha van, akit eszakra tettek, a BorderLayout elhelyez objektum lekerdezi, milyen magas szeretne lenni, es olyan magas lesz, eszakon ú Szelteben meg akkora, hogy kité ltse a kontenert NORTH Az elhelyezes sorrendje es modja ú Ha van, akit eszakra tettek, a BorderLayout elhelyez objektum lekerdezi, milyen magas szeretne lenni, es olyan magas lesz, eszakon ú Szelteben meg akkora, hogy kité ltse a kontenert NORTH Pelda ul egy nyomogombna l a felirata hata rozza meg, hogy mekkora szeretne lenni Az elhelyezes sorrendje es modja ú Ha van, akit delre tettek, ugyanezen strategia val lesz elhelyezve, csak delen ú Tegyuk fel, hogy most nincs senki delen: NORTH Az elhelyezes sorrendje es modja ú Ha van, akit nyugatra tettek, lekerdezzuk, milyen szeles szeretne lenni, es olyan lesz ú A magassa ga: amilyen magas csak lehet az eszak es del figyelembe vetelevel NORTH WEST SOUTH Az elhelyezes sorrendje es modja ú Ha van, akit keletre tettek, ugyanezzel a strategia val lesz elhelyezve, csak keletre Az elhelyezes sorrendje es modja ú Vegul a ké zepre tett komponens, ha van olyan, akkor kité lti a rendelkezesre a llo maradek teruletet. NORTH NORTH WEST EAST WEST CENTER EAST 9

Az elhelyezes sorrendje es modja ú Vegul a ké zepre tett komponens, ha van olyan, akkor kité lti a rendelkezesre a llo maradek teruletet. ú A pelda nkban most ne legyen center komponens NORTH BorderLayout bea llıta sa ú A Frame-nel a BorderLayout az alape rtelmezett ú Ma s kontenernel a setlayout metodus meghıva sa val kell bea llıtanunk ú Pe lda ul egy panelne l: WEST EAST Panel panel = new Panel(); panel.setlayout( new BorderLayout() ); panel.add( new Button("Bal"), BorderLayout.WEST );... Visszaterve egy kora bbi programra add(new Button("Szia")); add(new Button("Hello")); add(new Button("Salut")); public static void main(string args[]){... ú Az egy parameteres 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 parameteres add() haszna lhato ú A ra cs meretet a ma sik dimenzioban a komponensek sza ma hata rozza meg ú Pelda ul a fent letrehozott elrendez objektum ha rom sort alakıt majd ki... GridLayout konstruktora ú Ket parametert va r ú Ha az els parameternek pozitıv sza mot adunk meg, akkor annyi sort alakıt majd ki. Ilyenkor a ma sodik parameter indifferens. ú Ha az els parameter nulla, akkor a ma sodiknak kell pozitıvnak lennie, es 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

ú Keszı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, es legyenek egy 4 soros es ha rom oszlopos ra csban! Bonyolultabb ke perny ke p Proble ma TextArea Megolda s: Kontenerek es Layout Manager-ek egyma sba a gyaza sa Frame BorderLayout Panel p1 Panel p1 BorderLayout Panel p2 Panel p2 GridLayout A megoldo programkod 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

ú Proba ljuk ki az el bbi programot, de kis modosıta sokkal: ırjunk egy egyszerá szé vegszerkeszt programot ö A ket nyomogomb: Save es Load legyen ö Legyen egy TextField is, amibe a szerkesztend fa jlnevet kell megadni. Ezt egy cımke jelezze el tte. ú Tervezzunk meg egy Chat programot, melyben egyma s alatt ket, egyforma meretá TextArea tala lhato, valamint alattuk egy, az ablak szelesseget felvev, SendÉ felirat nyomogomb. Filename: Save 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, es mindig ugyanakkora legyen. (Amekkora szeretne lenni...) ú Figyeljuk meg, hogy hogyan viselkedik a telefonos panel, ha egesz kicsire vesszuk le az ablakot! Csina ljon vegre valamit a program... ú Rendeljunk funkcionalita st a feluletelemekhez ú Specifika ljuk, hogy mi té rtenjen, amikor valaki piszka l egy feluletelemet ú Eseme ny-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 ertesıti az t tartalmazo kontenert ö E s ıgy tova bb... ö Java 1.0 ú U j, fejlettebb esemenymodell: Java 1.1-to l 12

Eseme nymodell ú Esemeny forra sa: amivel té rtenhet valami ö pelda ul egy feluletelem, pelda ul egy nyomogomb ú Esemeny: ami té rtent ö pelda ul lenyomta k ú Figyel : ami reaga lni tud az esemenyre ö tartalmazza a kodot, amit vegre kell hajtani A re sztvev k A re sztvev k Forra s (Source) Ké rnyezeti hata s Esemeny (Event) Figyel (Listener) Forra s (Source) Esemeny (Event) Figyel (Listener) Figyel (Listener) Figyel (Listener) Forra s (Source) Forra s (Source) Esemeny (Event) Esemeny (Event) A re sztvev k Figyel (Listener) Figyel (Listener) Figyel (Listener) Figyel (Listener) A program haszna loja nyomogomb lenyomja Lenyomtak! AWT-s pelda Elmentjuk a fa jlt Egy menupontot kiszurkıtunk... 13

Ezek csak szerepek! A szerepl k tıpusa A program haszna loja A program haszna loja lenyomja lenyomja Elmentjuk a fa jlt ActionListener nyomogomb Lenyomtak! Egy menupontot kiszurkıtunk Button ActionEvent ActionListener... ActionListener A program haszna loja ikoniza lja Sokfe le re sztvev van WindowListener A kapcsolat felvetele egy interfesz ActionListener Window WindowEvent WindowListener Button Regisztra cio WindowListener public void addactionlistener(actionlistener l) public void removeactionlistener(actionlistener l) A kapcsolat felvetele Eseme ny eljuttata sa egy interfesz ActionListener A program haszna loja lenyomja ActionListener ActionListener Button Regisztra cio Button ActionEvent ActionListener public void addactionlistener(actionlistener l) public void removeactionlistener(actionlistener l) public void actionperformed(actionevent e) 14

A program haszna loja Eseme ny lekezele se lenyomja ActionEvent ActionListener Button ActionListener public void actionperformed(actionevent e) {... ú Irjunk eseme nykezel oszta lyt, e s egy pelda 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 letrehozni es a nyomogombhoz kapcsolni ket pelda 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() ); ú Lehet maga a Chat program is egy figyel. Csina lja azt, hogy az also TextArea tartalma t hozza 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 is megmaradjanak (hogy minden metodusbol haszna lhassuk ket) ú Azta n id vel a ket ma sik figyel t ki is lehet a m venni... :-) Kulé na llo oszta ly ú Sok esetben kenyelmes, ha az eseme nykezel t nem kulé na llo oszta lyke nt valosıtjuk meg ú Direkt hozza feres szukseges a komponensekhez ú Van, amikor az sem kenyelmes, ha a Framebe tesszuk az esemenykezelest ú Bea gyazott oszta lyok segıtenek majd... 15

ú Irjuk meg a Chat programot gy, hogy az esemenykezeles kulé n oszta lyban legyen. ú A szukseges informa ciokat el kell juttatni az eseme nykezele st ve gz objektumhoz... Bea gyazott oszta lyok ú A bea gyazott oszta lyok segıtsegevel ke nyelmesebb ú Nevtelen oszta lyok ú Az informa cio megfelel helyre té rten eljuttata sa val nem kell foglalkozni ú Ird meg a Chat programot gy, hogy nevtelen oszta lyt haszna lsz az eseme nykezele shez! Ma s eseme nyek ú WindowEvent, KeyEvent, ItemEvent, MouseEvent, MouseMotionEvent, ComponentEvent, ContainerEvent, stb. ú Minden komponensnel kitala lhato, hogy milyen 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 ) 16

(Window)Adapter ú Ha egy WindowListener-t ırunk, akkor meg kell valosıtani 7 metodust ú Fé lé slegesen macera s, mert sokszor csak egy metodus erdekel 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 ú A Chat programot egeszıtsuk ki gy, hogy ki lehessen bel le lepni. ú System.exit(0); ú Figyelem! Hibaforra s: ha rosszul ırjuk be a windowclosing nevet vagy parameterezeset, a fordıto nem fog szolni, mert é ré kl dik az ures té rzsá metodus... ú Csina ljuk azt is meg a Chat programban, hogy a fels TextArea-t ne lehessen szerkeszteni, es hogy egyb l az also TextArea kapja meg az input fokuszt, amikor elindul a program, meg miuta n lenyomtuk a Send nyomogombot. ú Fejezzuk be a szé vegszerkeszt programot! A Load es Save nyomogombhoz rendeljunk e rtelemszerá eseme nykezel ket. A fa jlnevet vegyuk a TextField-b l. A kilepesre is adjunk lehet se get. Loka lis va ltozok ele re se bea gyazott oszta lyokbol ú Az el z feladat sora n a komponenseket adattagkent vettuk fel ú Eleg, ha loka lis va ltozok ö az esemenykezelesert felel s nevtelen oszta lyokbol ıgy is elerhet k ú Ilyenkor final modosıtoszoval kell deklara lni ket ú Proba ld ki! 17

... 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 ve grehajtodik ú Az a tadott esemeny objektum informa ciot hordoz ú Pelda ul azt, hogy melyik forra sbol sza rmazik: getsource() metodus public void actionperformed(actionevent e){ if( e.getsource() ==... )... ú A szé vegszerkeszt programban a nyomogombok lekezeleset ne nevtelen oszta llyal valosıtsuk meg, hanem a Frame kapja meg az esemenyeket. Dé ntsé n a getsource() alapja n arrol, hogy mit kell csina lnia. 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) 18

Menusor ú Csak Frame-hez rendelhet hozza ú Applethez pelda ul nem! ö Pop-up menuk haszna lhatok appleteknel 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 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 szelen jelenik majd meg (Windows-on nem) m = new Menu("Help"); mb.sethelpmenu(m); 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 szinten ActionEvent-eket genera lnak, amikor kiva lasztja k ket mi.addactionlistener(... ) ú Irjuk jra a szé vegszerkeszt programot gy, hogy ne nyomogombokkal, hanem menukkel lehessen vezerelni. ú A menusor alatt csak egy TextArea legyen ú Legyen File menu(load, Save, elva laszto jel, Exit), legyen Edit menu(ures) es legyen Help menu(szinten ures) ú Egyel re a Load es a Save ne csina ljon semmit, de az Exit ma r máké djé n... Dialogus ablak ú Kontener (Container) ú Kulé n ablakkent jelenik meg (Window) ú Specia lis, el re elkeszıtett dialogusablak a FileDialog ú Moda lis vagy sem Component Container Window Dialog FileDialog 19

FileDialog haszna lata ú A konstruktorral letrehozzuk - parameterkent a 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() e s getdirectory() metodussal lekerdezhet a kiva lasztott fa jl es tvonal ö Cancel eseten a getfile() eredmenye null ú A szé vegszerkeszt programban az elmenteni, illetve beté lteni valo fa jl nevet egy FileDialog dialogusablakbol szerezzuk meg! ú A FileDialog objektumot csak egyszer hozzuk letre, elta roljuk a szé vegszerkeszt egy adattagja ban, es 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 ú 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 kerdezni, hogy bekapcsolt a llapotban van-e, vagy sem Menu am = new Menu("Settings"); CheckboxMenuItem mi = new CheckboxMenuItem("Monospaced font"); mi.additemlistener(...); am.add(mi); ú A szé vegszerkeszt program Edit menujeben 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 es a TextArea setfont() metodusa t ú Az ItemEvent getstatechange() metodusa hasznos lehet ú Ne kerdezzuk le t l kora n a TextArea fontja t! 20

Clipboard haszna lata ú Saja t is definia lhato, de elerhet a programok ké zé tti, ké zé s va golap is gettoolkit().getsystemclipboard(); ú A TextArea automatikusan kezeli Pl. Windows alatt Ctrl-X, Ctrl-C, Ctrl-V ú Stringek a tvitelere 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 ú Egeszıtsuk ki a szé vegszerkeszt programot Cut, Copy es 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) es setbackground(color) Color.red new Color(140,180,200) ú A Chat programban az also TextArea ha tterszıne legyen fekete, a beták szıne legyen sa rga. ú A Send nyomogomb felett a kurzor legyen kez alak. ú Haszna ljuk a chat.gif fa jlt a Chat program ikonjakent. 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 pelda: Applet vagy Canvas 21

Pelda 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 reszet reprezenta lja ú Keperny pontok ma trixa ú A komponens bal fels sarka a 0,0 koordina ta j pont, ehhez kepest lehet pozı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) 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) ú Kepek, szé vegek void drawstring(string str, int x, int y) void drawimage(image i, int x, int y, ImageObserver o) 22

Teglalapok, ellipszisek merete ú Ha egy 10 x 10 -es negyzetet akarunk rajzolni, 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 ú Rajzolj pa lcikaemberke t. ú Definia ld felul a Frame paint metodusa t 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 ú Az emberkes programot alakıtsuk gy ki, hogy alul legyen egy nyomogomb. ú A rajzot egy Canvas objektumon helyezzuk el... Ha va ltoztatni akarunk a rajzon ú 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, es ezert jra akarjuk rajzolni a kepet, ne a paint() metodust hıvjuk, hanem a repaint()-et 23

repaint() public void repaint() ú Ez leté rli a komponensunk kepet, majd meghıvja a paint()-et ú Egesz pontosan a repaint() az update()-et hıvja, az té rli le a komponenst es hıvja meg a paint()-et ö ha nem akarunk té ré lni, vagy offscreen rajzola st akarunk csina lni, akkor itt lehet ké zbeavatkozni ú Az emberkes 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 kezet felfele vagy lefele rajzolja meg ú Teha t a nyomogomb hata sa ra az emberke mozgatja majd a kezet 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... ú Az emberke elforgatva es eltolva jelenjen meg... public void paint( Graphics g ){ ((Graphics2D)g).rotate(0.42);... Platform-fugg informa ciok ú A Toolkit objektumon keresztul gettoolkit().getfontlist() gettoolkit().getscreensize() ú Nem csak a komponenseken keresztul juthatunk hozza Toolkit objektumhoz Toolkit.getDefaultToolkit() ú A szé vegszerkeszt program kezdetben foglalja el az egesz keperny t. 24