Java felhasználói felület

Hasonló dokumentumok
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 felhasználói felületek. Abstract Window Toolkit, a java.awt és java.awt.event csomagok

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).

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

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

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

és az instanceof operátor

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

Már megismert fogalmak áttekintése

Interfészek. PPT 2007/2008 tavasz.

Abstract osztályok és interface-ek. 7-dik gyakorlat

Java Programozás 11. Ea: MVC modell

ESEMÉNY VEZÉRELT ALKALMAZÁSOK FEJLESZTÉSE I. Bevezetés. Készítette: Gregorics Tibor

Programozási nyelvek Java

Programozási nyelvek Java

Programozási nyelvek II.: JAVA

JAVA PROGRAMOZÁS 5.ELŐADÁS

ZH mintapélda. Feladat. Felület

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

Programozás BMEKOKAA146. Dr. Bécsi Tamás 8. előadás

Java felhasználói felület

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

Kivételkezelés, beágyazott osztályok. Nyolcadik gyakorlat

OOP és UML Áttekintés

Java programozási nyelv 4. rész Osztályok II.

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

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni?

JAVA PROGRAMOZÁS 2.ELŐADÁS

Programozási technológia

Johanyák Zsolt Csaba: Ugráló gomb oktatási segédlet Copyright 2008 Johanyák Zsolt Csaba

Szoftvertechnolo gia gyakorlat

Programozási Paradigmák és Technikák

VI. Grafikus Java alkalmazások

Concurrency in Swing

Java programozási nyelv 5. rész Osztályok III.

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

Enterprise JavaBeans 1.4 platform (EJB 2.0)

Öröklés és Polimorfizmus

7. K: JAVA alapok Konzultáció

Programozási nyelvek Java

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

Programozás BMEKOKAA146. Dr. Bécsi Tamás 5. előadás

A Java nyelv. Dialógus ablakok. Elek Tibor

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

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

Segédanyag: Java alkalmazások gyakorlat

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

Osztályok. 4. gyakorlat

Swing GUI készítése NetBeans IDE segítségével

ELTE SAP Excellence Center Oktatóanyag 1

OOP: Java 8.Gy: Gyakorlás

Eseménykezelés. Szoftvertervezés és -fejlesztés II. előadás. Szénási Sándor.

Osztálytervezés és implementációs ajánlások

Osztálytervezés és implementációs ajánlások

Enterprise JavaBeans. Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem. Az Enterprise JavaBeans

Széchenyi István Egyetem. Programozás III. Varjasi Norbert

Java és web programozás

Java felhasználói felület

Segédanyag: Java alkalmazások gyakorlat

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

Statikus adattagok. Statikus adattag inicializálása. Speciális adattagok és tagfüggvények. Általános Informatikai Tanszék

Szoftvertechnológia alapjai Java előadások

Programozási nyelvek Java

Java és web programozás

Interfészek. Programozás II. előadás. Szénási Sándor.

Java Programozás 3. Ea: Java osztályok. OOP alapalapok

Programozás I. 5. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

C++ programozási nyelv

Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 2.ELŐADÁS. Objektumorientált programozás

Elemi Alkalmazások Fejlesztése II.

JAVA PROGRAMOZÁS 3.ELŐADÁS

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

Programozás. C++ osztályok. Fodor Attila. Pannon Egyetem Műszaki Informatikai Kar Villamosmérnöki és Információs Rendszerek Tanszék

C++ programozási nyelv

Eseménykezelés - Lottó játék

Java és web programozás

Vé V g é r g e r h e a h j a tá t s á i s s z s ál á ak a Runnable, Thread

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

OOP #14 (referencia-elv)

Programozás BMEKOKAA146. Dr. Bécsi Tamás 7. előadás

Grafikus felhasználói felület (GUI) létrehozása A GUI jelentése Egy egyszerű GUI mintaalkalmazás létrehozása

Objektumorientált programozás C# nyelven

Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*;

components : IContainer dx : int dy : int tmidőzítő : Timer toolstripseparator1 : ToolStripSeparator tsmikilépés : ToolStripMenuItem

Alap számológép alkalmazás

Osztályok. construct () destruct() $b=new Book(); $b=null; unset ($b); book.php: <?php class Book { private $isbn; public $title;

Programozás BMEKOKAA146. Dr. Bécsi Tamás 10. Előadás

WEB-PROGRAMOZÁS II. 1. Egészítse ki a következő PHP kódot a következők szerint: a,b,c,d: <?php. interface Kiir { public function kiir();

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

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

Java és web programozás

Ugráló gomb oktatási segédlet Ugráló gomb

Objektum Orientált Programozás. 5. JAVA osztályok 21/1B IT MAN

Vizuális és eseményvezérelt programozás , II. félév BMF NIK

JUnit. JUnit használata. IDE támogatás. Parancssori használat. Teszt készítése. Teszt készítése

Alprogramok, paraméterátadás

Se S r e ial a iza z t a ion o n (in n Ja J v a a v ) a Szerializáció

Webes alkalmazások fejlesztése

Java V. Osztályszint. lyszintű ű tagok. Példányváltozó. Osztályváltozó. Általános Informatikai Tanszék Utolsó módosítás:

Átírás:

Java felhasználói felület Eseménykezelés Elek Tibor

Eseményosztályok Az események előfordulásakor keletkezik egy megfelelő eseményobjektum. Pl. KeyPressed vagy KeyReleased (billentyű lenyomása vagy felengedése) esetén létrejön egy java.awt.event.keyevent objektum. Pl. ComponentAdded (komponenst beleraktak) esetén létrejön egy ContainerEvent objektum. Az esemény objektum információkat tartalmaz az eseményről (pl. forrás komponens, leütött bill., stb.)

Feliratkozás az eseményre A komponensek azokra az eseményekre, amelyek előfordulhatnak velük kapcsolatban, rendelkeznek addxxlistener(xxlistener lis) metódussal, ahol XX az eseményneve. Ezzel lehet bejegyeztetni az eseményt lekezelő objektumot. Pl. legtöbb komponens rendelkezik void addkeylistener(keylistener lis) metódussal, amellyel bejegyeztethet egy kezelőt a billentyűzet eseményekre.

Eseménykezelő objektum Egy eseményt egy olyan osztály egy példánya kezelhet, amely implementálja a megfelelő interface-t. (látszik az addxxlistener() szintaktikájából is) Az XXEvent eseménynek megfelelő interface neve XXListener. Pl. KeyEvent-t kezelő osztálynak implementálnia kell a KeyListener interface-t.

Eseménykezelő interface-k Az interface annyi metódus deklarációját tartalmazza, ahány eseményfajtánál váltódik ki az adott esemény. Pl. A KeyListener három metódus deklarációját tartalmazza, mivel mindhárom esemény esetén KeyEvent keletkezik. void keytyped(keyevent e); void keypressed(keyevent e); void keyreleased(keyevent e);

Eseménykezelő interface-ekből osztályok Azokból az interface-kből, amelyekben több metódus is van deklarálva. XXListener -> XXAdapter Az adapter osztály implementálja az interface-t üres metódus törzsekkel. Tehát az eseménykezelő osztályt ebből is származtathatom és akkor csak a szükséges metódust definiálom felül.

Feiratkozás az eseményre összefoglalva pl. menüelemek, nyomógombok esetén előfordulhat ActionEvent ha rá kattintanak. Tehát létre kell hozni egy ActionListener interface-t implementáló osztályt, majd ennek egy példányát be kell jegyezni eseménykezelőnek a gomb vagy menüelem addactionlistener metódusának meghívásával paraméterként megadva az eseménykezelő objektumot. Az ActionListener egy void actionperformed(actionevent) metódust deklarál, az objektumnak ez metódusa fog meghívódni az esemény előfordulásakor.

Az eseménykezelő osztályt tervezhetem úgy, hogy - egy komponens eseményére reagáló: Sok eseménykezelő osztályunk lesz, de egynek a kódja rövidebb, gyorsabb - több komponens eseményére reagáló: Kevesebb eseménykezelő osztályunk lesz, de egynek a kódja hosszabb, hiszen ilyenkor az eseménykezelő metóduson belül el kell ágazni az esemény forrása szerint. Az esemény paraméter tartalmaz információkat az esemény forrásáról. Kétféle információ alapján ágazhatunk el: A) az esemény forrás referenciája alapján B) az esemény forrás akció parancsa alapján

Egy eseménykezelő, több forrás A) Lekérdezhető az esemény forrásának referenciája a getsource() metódussal (Ne felejtsük, hogy ilyenkor az eseménykezelő osztályban elérhetőnek kell lennie a komponens referenciájának, hogy legyen mivel összehasonlítani! (btnir2, btnir3)) public void actionperformed(actionevent arg0) { if (arg0.getsource() == btnir2) System.out.println("Gomb kettő"); else if (arg0.getsource() == btnir3) System.out.println("Gomb három");

B) Lekérdezhető a forrás komponens akció parancsa. Néhány komponensfajtának lehet megadni egy akció parancsot (ez egy egyszerű szöveg) public void actionperformed(actionevent arg0) { if (arg0.getactioncommand().equals("iro2")) System.out.println("Gomb kettő"); else if (arg0.getactioncommand().equals("iro3")) System.out.println("Gomb három");

Az eseménykezelő osztályt tervezhetem úgy, hogy A) A csúcs konténert definiáló osztály legyen, B) külső, önálló osztály legyen, C) beágyazott tagosztály legyen, nincs gond a private adatok elérésével D) névtelen beágyazott osztály, csak ha egy komponens eseményeire reagál E) névtelen beágyazott osztály, amely meghívja a beágyazó egy metódusát A GUI szerkesztők általában a D) vagy E) séma szerint generálják le a kódot, de átállítható.

Az eseménykezelő osztály fajtái A) A csúcs konténert definiáló osztály egyben az eseménykezelő osztály is. Amellett, hogy a csúcskonténert definiáló osztályban pakolom össze a komponens fát, még meg kell valósítsa a megfelelő eseménykezelő interface-t(-eket) is. - Kevesebb osztály, de az osztályom kódja hosszabb, nehezebben áttekinthető. public class EsemenyPelda extends JFrame implements ActionListener { @Override public void actionperformed(actionevent arg0) {

Az eseménykezelő osztály fajtái B) Egy külső, önálló osztályt készítünk az esemény kezeléshez. Az osztály meg kell valósítsa a megfelelő eseménykezelő interface-t is. - Sok osztály (sok file), de az egyes eseménykezelő osztályok kódja kizárólag az eseménykezelő metódust tartalmazza. - Nehézkes ebből az osztályból elérni a grafikus felületünket tartalmazó osztály változóit, pedig gyakran van rá szükség (pl. a grafikus felület módosítása miatt). - Ritkán használt megoldás, hiszen felesleges publikus, más program által is használható osztályokat készíteni. Helyette inkább beágyazott osztályokat célszerű használni.

Az eseménykezelő osztály fajtái C) Egy beágyazott tagosztály az eseménykezelő. - Kevesebb forrás file mintha önálló osztályokat használnánk és lehet private elérésű is. A beágyazó osztály forrása viszont hosszabb. - Statikus beágyazott tagosztály esetén (úgy mint külső osztálynál) gondot jelenthet a módosítani kívánt adatok elérése, hiszen ezek példányszintűek általában. Megoldás lehet átadni a referenciáját. - Példányszintű beágyazott tagosztálynál a beágyazó osztály adatai könnyen elérhetők

Az eseménykezelő osztály fajtái C) Osztályszintű beágyazott tagosztály példa részlet. public class EsemenyPelda { public EsemenyPelda() { this.btnszinez2.addactionlistener( new Szinez2Kez(this)); private static class Szinez2Kez implements ActionListener{ private EsemenyPelda kulso; public Szinez2Kez(EsemenyPelda kulso) { this.kulso = kulso; public void actionperformed(actionevent e) { this.kulso.btnir2.setbackground(color.orange);

Az eseménykezelő osztály fajtái C) Példányszintű beágyazott tagosztály példa részlet. public class EsemenyPelda { public EsemenyPelda() { this.btnszinez3.addactionlistener(new Szinez3Kez()); private class Szinez3Kez implements ActionListener{ public void actionperformed(actionevent e) { EsemenyPelda.this.btnIr2.setBackground( Color.YELLOW);

Az eseménykezelő osztály fajtái D) Névtelen beágyazott osztály az eseménykezelő. Mivel minden egyes esemény lekezelés egyedi így felesleges elnevezett osztályt létrehozni. - Hasonlít a Példányszintű beágyazott tagosztályokhoz, de a kód közelebb van a felhasználáshoz. public class EsemenyPelda { public EsemenyPelda() { this.btnszinez1.addactionlistener( new ActionListener(){ public void actionperformed(actionevent e) { EsemenyPelda.this.btnIr2.setBackground( Color.CYAN); );

Az eseménykezelő osztály fajtái E) Névtelen beágyazott osztályból meghívva a beágyazó egy metódusát. Ez egyesíti az A) és D) megoldás előnyeit. public class EsemenyPelda { public EsemenyPelda() { this.btnszinez1.addactionlistener( new ActionListener(){ public void actionperformed(actionevent e) { szinez1actionperformed(e); ); public void szinez1actionperformed(actionevent e) { EsemenyPelda.this.btnIr2.setBackground(Color.CYAN);

Példa 6 gomb különböző eseménykezeléssel (EsemenyPelda) Iró gombok: kiírnak a consolra Színező gombok: színezik az Iro 1 gombot Iro 1 : D) Iro 2, Iro 3 : A) (elágazás referencia alapján, megjegyzésben a másik fajtával is) Szinező 1 : D) (hivatkozva egy komponensre) Szinező 2 : C) osztályszintű Szinező 3 : C) példányszintű

Gyakorlat Egy panel és három gomb. Az egyik hatására átméretezi a panelt. A másik hatására elmozdítja. A harmadik hatására kirak rá egy gombot. Névtelen osztály eseménykezelőkkel. A három gomb felirata növekedjen meg kettővel, ha az egér a gomb felé ér és álljon vissza eredeti méretére ha elhagyja. Beágyazott tagosztály közös eseménykezelővel.