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



Hasonló dokumentumok
VI. Grafikus Java alkalmazások

JAVA PROGRAMOZÁS 5.ELŐADÁS

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.

Szoftvertechnológia alapjai Java előadások

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

Java tutorial Grafikus felhaszna loi feluletek

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

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

ZH mintapélda. Feladat. Felület

Gábor Dénes Főiskola (IAI) Programozási technológia (Java) - II. / 1

Java Programozás 11. Ea: MVC modell

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

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

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

Swing. (A javax.swing csomag)

Java felhasználói felület

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

Java felhasználói felület

Példaprogram - 2. Objektum-orientált programozás Java és C++ nyelven. Példaprogram. Azonosítók. Dr. Rohonczy János. Azonosítók

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

Programozási technológia

Objektumorientált szoftvertervezés

Objektumorientált szoftvertervezés

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

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

JAVA PROGRAMOZÁS 3.ELŐADÁS

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

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

JAVA SE/ME tanfolyam tematika

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

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

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

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

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 8. Gy: Java alapok. Adatkezelő 4.rész

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

Concurrency in Swing

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

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

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek

Objektumorientált programozás C# nyelven

Segédanyag: Java alkalmazások gyakorlat

PHP II. WEB technológiák. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) PHP II / 19

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem

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

Vizuális, eseményvezérelt programozás I.


Java Programozás 1. Gy: Java alapok. Ismétlés ++

A Java nyelv. VI. Adatbázis-kezelés Javaban, Példaprogram Az elôzô részben láthattuk, hogy a Java ideális programozási nyelv perszisztens objektumok

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

Programozási nyelvek és módszerek Java Thread-ek

Szoftvertechnológia alapjai Java előadások

Collections. Összetett adatstruktúrák

Magas szintű programozási nyelvek 2 Előadás jegyzet

Segédanyag: Java alkalmazások gyakorlat

OOP: Java 8.Gy: Gyakorlás

List<String> l1 = new ArrayList<String>(); List<Object> l2 = l1; // error

FELÜLET...13 PROJEKTTERV...14

- Alkalmazásfejlesztési szemlélet megismerése - Java GUI készítés bemutatása Swing-ben - Órai feladat megoldása

Objektumorientált programozás C# nyelven III.

C# osztályok. Krizsán Zoltán

Egységes és objektumközpontú adatbázis-kezelés (2. rész)

és az instanceof operátor

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

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

Végrehajtási szálak - kiegészítések. Szinkronizálás, érvénytelenített metódusok helyettesítése

INFORMATIKAI ALAPISMERETEK

Bánsághi Anna

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

A WEB programozása - JSP1 dr.gál Tibor őszi félév

JNDI - alapok. Java Naming and Directory Interface

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

3. Határozza meg és írja ki a minta szerint, hogy a forrásállományban hány kémiai elem felfedezési adatai

Objektumorientált programozás C# nyelven

Overview. Service. Application Activity Activity 2 Activity 3. Fragment. Fragment. Fragment. Frag ment. Fragment. Broadcast Receiver

Programozás I. Első ZH segédlet

Elemi alkalmazások fejlesztése IV. Adatbázis-kezelő GUI alkalmazás készítése 3. Összetett tábla karbantartása

Java és web programozás

Java Programozás 8. Ea: GUI. Graphical User Interface

Kalapácsvetés 2016 szöveges

Java programozási nyelv

Tartalomjegyzék. Bevezetés...2

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;

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

Hello World Servlet. Készítsünk egy szervletet, amellyel összeadhatunk két számot, és meghívásakor üdvözlőszöveget ír a konzolra.

INFORMATIKAI ALAPISMERETEK

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

Programozási nyelvek Java

OOP: Java 4.Gy: Java osztályok

I. 288.: Utcai WiFi térkép

A feladatok megoldásához felhasználandó osztályok leírásait az alábbi URL-en találja meg:

Programozási nyelvek Java

Kivételkezelés, naplózás. Exception handling, logging

Programozási nyelvek II.: JAVA

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

7. K: JAVA alapok Konzultáció

CREATE TABLE student ( id int NOT NULL GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name varchar(100) NOT NULL, address varchar(100) NOT NULL )

Webes alkalmazások fejlesztése 8. előadás. Webszolgáltatások megvalósítása (ASP.NET WebAPI)

Átírás:

Grafikus felhasználói felületek készítése és eseménykezelés Java-ban Abstract Window Toolkit, a java.awt és java.awt.event csomagok

Abstract Window Toolkit Absztraktizálás: az osztályok és funkcionalitások azonosak, a komponensek az aktuális platformnak megfelelően jelennek meg, a platformfüggetlenséget cserélhető, platform-specifikus, komplex eszköztárak (toolkit) valósítják meg. (a toolkit-ek komplexitása több problémához, bughoz vezetett SWING) Toolkit: component factory java.awt.peer interfészek a komponens típusokhoz

AWT - osztályhierarchia Component: absztrakt metódusok, melyeket majd a különböző speciális komponensek implementálnak - megjelenítést és viselkedést kontroláló attribútumok és metódusok (szín, méret, stb.) Container (tároló) osztályok: több komponenst tartalmaznak (panel, ablak, stb.) Működés: a kommunikáció események segítségével történik, a felhasználótól származó inputokról (pl. kattintás egérrel) egy AWT szál értesíti a regisztrált receptorokat (Listener objektumok).

Model View - Controller MVC szerkezeti minta: célja a modell (adatok, az alkalmazás által kezelt információk), a nézet (a modell megjelenítése, grafikus felhasználói felület) és a vezérlés (felhasználói műveletek, események feldolgozása) szétválasztása növelni a rugalmasságot, egyszerűsíteni a szerkezetet Példa: gomb (button): Modell: logikai érték (az állapotoknak megfelelően) View: a gomb megjelenítése (pozíció, méret, szín stb.) Controller: a gombbal kapcsolatos események kezelése Általános működés: A felhasználó hatást gyakorol a felületre (pl. lenyom egy gombot) A vezérlő átveszi az eseményt a felülettől, majd, ha szükséges az eseménynek megfelelően frissíti a modellt A nézet (felület) a modell alapján frissítődik, és új eseményekre vár Megjegyzés: a modellnek nincs tudomása a nézetről

Példa Ablak (frame) két gombbal (button) és egy címkével (label): import java.awt.frame; import java.awt.button; import java.awt.label; public class MyFrame extends Frame{ private Button buttons[]; private Label label; public MyFrame(){ // gombok létrehozása buttons = new Button[ 2 ]; buttons[ 0 ]= new Button("Button 1"); add( buttons[ 0 ], BorderLayout.NORTH); buttons[ 1 ]= new Button("Button 2"); add( buttons[ 1 ], BorderLayout.SOUTH ); // a címke létrehozása label = new Label("Label"); add( label, BorderLayout.CENTER); public static void main(string[] args) { MyFrame f = new MyFrame(); f.setbounds(10,10, 300, 300 ); f.setvisible( true );

Komponensek elrendezése A komponensek container -eken belüli elrendezése layout manager osztályok segítségével történik: FlowLayot, GridLayout,CardLayout, BorderLayout, GridBagLayout, stb. FlowLayout flayout = new FlowLayout(); setlayout( flayout ); Button butonok = new Button("Ok"); add(butonok); Button butoncancel = new Button("Cancel"); add(butoncancel); setlayout( new FlowLayout()); add( new Button("Ok")); add( new Button("Cancel")); FlowLayout flayout = new FlowLayout(); flayout.setalignment(flowlayout.left) setlayout( flayout ); setlayout( new BorderLayout(), 10,6); add( new Button("Egy"),BorderLayout.NORTH); add( new Button("Ketto"),BorderLayout.EAST); add( new Button("Harom"),BorderLayout.SOUTH); add( new Button("Negy"),BorderLayout.CENTER);

Eseménykezelés A GUI komponensek közötti kommunikáció eseményeken (events) keresztül történik. Az események tulajdonképpen üzenetek (pl. egy gomb értesíti az alkalmazást, ha a felhasználó kattintott rá). Egy eseménynek egy forrása, és egy vagy több címzettje (receptor) lehet. A címzett a fogadott eseményeknek megfelelő összes metódust implementálja. Esemény példák: ActionEvent, MouseEvent Az események eljuttatása a címzetthez megfigyelt megfigyelő modell alapján történik: A regisztrálás pillanatában a receptor hozzáadódik egy listához. Ez a lista tartalmazza mindazokat a receptorokat, akik érdekeltek az illető esemény megfigyelésében Az esemény a címzetthez egy megfelelő metódus meghívásával jut el, ezek a metódusok az eseményeknek megfelelő Listener interfészekben vannak definiálva Pl. kattintás gombra: ActionEvent ActionListener public void actionperformed(actionevent))

Eseménykezelés - példa Gomb (button) - ActionEvent típusú események forrása lehet: Button b = new Button( OK ); Címzett: class Receptor implements ActionListener{ private void setupreceiver(){... b.addactionlistener( this ); public void actionperformed( ActionEvent e ){ // mi történjen a gomb lenyomásakor A forrásnak lehetőséget kell adnia a címzettek regisztrációjára. Ehhez esetünkben a Button osztálynak a következő metódusokat kell biztosítania: public void addactionlistener( ActionListener listener ){... public void removeactionlistener( ActionListener listener ){...

AWT események - osztályhierarchia

AWT események Esemény Előfordulás Listener interfész Megfelelő metódusok ComponentEvent Minden komponens ComponentListener FocusEvent Minden komponens FocusListener KeyEvent Minden komponens KeyListener componentresized() componentmoved() componentshown() componenthidden() focusgained() focuslost() keytyped() keypressed() keyreleased() MouseListener MouseEvent Minden komponens MouseMotionListener ContainerEvent Minden container ContainerListener mouseclicked() mousepressed() mousereleased() mouseentered() mouseexited() mousedragged() mousemoved() componentadded() componentremoved()

AWT események Esemény Előfordulás Listener interfész Megfelelő metódusok ActionEvent TextField MenuItem List Button ActionListener actionperformed() ItemEvent List CheckBox Choice CheckboxMenuItem ItemListener itemstatechanged() AdjustmentEvent ScrollPane Scrollbar AdjustmentListener adjustmentvaluechanged() TextEvent TextArea TextField TextListener textvaluechanged() WindowEvent Frame Dialog WindowListener windowopened() windowclosing() windowclosed() windowiconified() windowdeiconified() windowactivated() windowdeactivated()

InputEvent java.awt.event.inputevent Konstansok: SHIFT_MASK, CTRL_MASK, META_MASK, ALT_MASK, BUTTON1_MASK, BUTTON2_MASK, BUTTON#_MASK stb. + metódusok public void mousepressed( MouseEvent e){ int mods = e.getmodifiers(); if( ( mods & InputEvent.SHIFT_MASK)!= 0 ){ // SHIFT lenyomva...

Adapter osztályok Példa: italautomata: három gomb kávé, tea, üdítő Adapter nélkül: public void actionperformed(actionevent e){ if (e.getsource()==tea_gomb) else if A GUI egybeolvad a logikával, az MVC elv sérül. Jobb megoldás külön adapter osztályok alkalmazása: class KaveAdapter implements ActionListener{ ItalAutomataVezerlo c; KaveAdapter ( ItalAutomataVezerlo c ){ this.c = c; public void actionperformed( ActionEvent e ){ c.kave(); ItalAutomataVezerlo c; kave_gomb.addactionlistener( new KaveAdapter(c));

AWT Adapter osztályok példa mycomponent.addmouselistener( new MouseAdapter(){ public void mousepressed( MouseEvent e ){... );

Események létrehozása - példa

Események létrehozása példa class CounterEvent extends EventObject{ private int count; CounterEvent ( Object source, int count ){ super( source ); this.count = count; public int getcount(){ return count; interface CounterChangeListener extends EventListener{ void counterchange( CounterEvent e );

Események létrehozása példa class Counter extends Thread{ private int count = 0; private Vector listeners = new Vector(); public Counter( string name, int count ){ super( name ); this.count = count; public Counter( int count ){ this.count = count; public Counter(){ this( 0 ); public void run(){ while( true ){ try{ sleep( ( int ) Math.round( Math.random()*3000)); catch( InterruptedException e ){ count++; notifycounterchange( count );

Események létrehozása példa public void startcounting(){ this.start(); public notifycounterchange( int count ){ Vector tmplist; CounterEvent ce = new CounterEvent( this, count ); synchronized( this ){ tmplist = (Vector ) listeners.clone(); for( int i=0; i<tmplist.size(); i++){ ((CounterChangeListener ) tmplist.elementat(i)).counterchange( ce ); public synchronized void addcounterchangelistener( CounterChangeListener ccl ){ listeners.addelement( ccl ); public synchronized void removecounterchangelistener( CounterChangeListener ccl ){ listeners.removeelement( ccl );

Események létrehozása példa public class CounterControl implements CounterChangeListener { public CounterControl() { Counter c = new Counter(); c.addcounterchangelistener(this); c.startcounting(); public static void main(string[] args) { CounterControl cc = new CounterControl(); public void counterchange(counterevent e) { System.out.println("Counter value has changed: " + e.getcount());