Java programozási nyelv 8. rész – Grafikus felhasználói felület Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2005. szeptember
A Java programozási nyelv
Soós Sándor
1/17
Tartalomjegyzék ● ● ● ● ● ● ● ● ●
Összetett alkalmazások felépítése Grafikus felhasználói felületek - GUI Objektum orientált felhasználói felület Eseményvezérelt programozás A GUI kialakítása Java-ban Layout Manager - Elrendezés manager AWT segédosztályok Eseménykezelés Interfész - Interface
A Java programozási nyelv
Soós Sándor
2/17
Összetett alkalmazások felépítése ●
Háromrétegű alkalmazások: – – –
●
●
A három réteg teljesen különválasztható, vagy tetszőleges módokon összeolvasztható. Egyik véglet: –
●
Adatbázis Alkalmazás Felhasználói felület
a három réteg egyben van
Másik véglet: – – – –
adatbázis szerver alkalmazás szerver felhasználói felület (a mai órán ezzel foglalkozunk) Logikailag és fizikailag is szétválnak, akár külön gépeken futnak
A Java programozási nyelv
Soós Sándor
3/17
Felhasználói felület ●
Hagyományos, szekvenciális működésű programok – – –
●
Kérdés – válasz – kérdés – válasz – … általában karakteres felületű, de nem ez a lényeg a felhasználó akkor avatkozhat be, ha a program kérdést tesz fel
Igazi interaktivitás – – –
–
a program működik, végzi a munkáját a felhasználó bármikor beavatkozhat az adatbevitel sem szekvenciális, űrlapokat töltünk ki, az egyes mezőket tetszőleges sorrendben tölthetjük ki, végül egy gombnyomással jelezzük a bevitel végét. Így működnek a mai grafikus felhasználói felületek
A Java programozási nyelv
Soós Sándor
4/17
Grafikus felhasználói felületek GUI – (Graphical User Interface) ●
A felhasználó szempontjából: – – –
●
Színes, grafikus, jól átlátható felület Ablaktechnika Egérkezelés
A programozó szempontjából: – –
Objektumorientált programozás Eseményvezérelt programozás
A Java programozási nyelv
Soós Sándor
5/17
Objektum orientált felhasználói felület ● ●
A felhasználói felület minden eleme egy-egy objektum Az objektumok között különböző kapcsolat lehet: –
egymástól független objektumok ●
–
például két adatbeviteli mező
egyik objektum tartalmazza a másikat ● ● ●
például egy párbeszédablak és a benne lévő beviteli mezők általában egy dinamikus listába fűzzük fel az objektumokat hierarchikus rendben helyezkednek el az objektumok – ablak ablak panel panel groupbox groupbox checkbox checkbox ●
●
●
A Java programozási nyelv
Soós Sándor
6/17
Eseményvezérelt programozás ●
Az objektumok egymással és a felhasználóval eseményeken keresztül tartják a kapcsolatot. – – – –
Az egyik objektum kivált egy eseményt Létrehoz egy esemény objektumot A futtató rendszer elkapja az eseményt és eljuttatja a célobjektumhoz. A célobjektum lekezeli az eseményt
A Java programozási nyelv
Soós Sándor
7/17
Példa eseményvezérelt kommunikációra ●
A jelenség: –
●
Az egérrel rákattintunk egy gombra, ami átállítja az ablak háttérszínét.
Mi történik a háttérben? – – – –
Az operációs rendszer (pl. a Windows) érzékeli az egér kattintást. Az eseményt továbbítja annak a programnak, amelyik ablakában volt az egér a kattintáskor. A program továbbítja annak az objektumnak, amelyik területén történt a kattintás. Példánkban a gomb lekezeli az eseményt, azaz lefut a hozzárendelt metódus, átállítja az ablak háttérszínét.
A Java programozási nyelv
Soós Sándor
8/17
Mindezek megvalósítása Java-ban ●
A grafikus felhasználói felület megvalósítása –
java.awt csomag ● ● ●
–
natív kódban megírt grafikus objektumok hordozható kód, de a kinézet platformfüggő egyelőre ezzel fogunk foglalkozni
javax.swing csomag ●
● ● ●
az operációs rendszerből csak az alap grafikus utasításokat használja a grafikus objektumokat Java nyelven valósítja meg hordozható kód az objektumok kinézete platformfüggetlen, sőt szabályozható (javax.swing.LookAndFeel)
A Java programozási nyelv
Soós Sándor
9/17
A GUI kialakítása Java-ban ● ●
Egy egyszerű példa alkalmazás: ColorGUI.java Lépések: – – – – –
● ●
Létrehozunk egy Frame-et. Ez lesz a program főablaka. Beállítjuk a használni kívánt Layout managert (setLayout). Sorban létrehozzuk (példányosítjuk) a szükséges komponenseket, és befűzzük a Frame-be (add). Beállítjuk a Frame méretét (setSize). Megjelenítjük a Frame-et (show).
Ezzel elkészült a felület. Ez egy "működő" program, de még nem csinál semmit.
A Java programozási nyelv
Soós Sándor
10/17
Layout Manager Elrendezés manager ●
Dinamikusan elrendezi a konténer-ben lévő komponenseket. Különböző Layout managerek eltérő elvek alapján rendezik el a komponenseket: – – – – –
FlowLayout – A Panel és az Applet default elrendezés menedzsere. Sorfolytonos elhelyezést ad. BorderLayout – északi, déli, keleti, nyugati és középső régió GridLayout – megadott számú sor és oszlop jön létre GridBagLayout – mint a GridLayout, de több cella összevonható (ld. numerikus billentyűzet) CardLayout – egymáson lévő komponensek közül a csak a felső látszik, mint egy kártyapakli, lapozható
A Java programozási nyelv
Soós Sándor
11/17
AWT segédosztályok ●
Point osztály: egy képernyő pozíció – –
●
Dimension osztály: szélesség, magasság – –
●
adatmezők: int width, height metódusok: double getWidth(), double getHeight()
Rectangle osztály: egy téglalap –
●
adatmezők: int x, y metódusok: double getX(), double getY()
Point + Dimension
Polygon osztály: zárt sokszög –
a csúcspontok két tömbben vannak
A Java programozási nyelv
Soós Sándor
12/17
AWT segédosztályok, folyt. Színek ●
Color osztály: színek – –
●
konstansok a színek angol nevei csupa kisbetűvel Color.black, Color.red, Color.blue, stb.
SystemColor osztály: az ablakkezelő rendszer színei –
Néhány példa: ● ● ● ●
SystemColor.window: ablakok háttérszíne SystemColor.menuText: a menük szövegének színe SystemColor.desktop: a munkaasztal háttérszíne stb.
A Java programozási nyelv
Soós Sándor
13/17
Eseménykezelés ● ●
●
●
●
Töltsük meg élettel a felhasználói felületet! Eseményfigyelő objektumokat kapcsolunk azokhoz a komponensekhez, amelyekkel reagálni akarunk valamely eseményre. Az eseményfigyelő objektumoknak van egy vagy több olyan metódusa, ami meghívásra kerül, amikor kiváltódik az általa figyelt esemény. Ezeket a metódusokat definiálva reagálhatunk az eseményre. A java.awt.event csomag definiálja az AWT által használt eseményfigyelő interfészeket.
A Java programozási nyelv
Soós Sándor
14/17
Interfész - Interface ●
●
●
Az interface a Java nyelv másik alapvető építőköve a class mellett. Az interface tulajdonképpen egy teljesen abstract osztály, csak abstract metódus deklarációk és konstansok szerepelnek benne. Az interface-ek az osztályokhoz hasonlóan öröklési kapcsolatban állhatnak egymással, de – –
●
nincsen "közös ős" interface (mint az Object az osztályoknál) van többszörös öröklődés
Az interface-eket ugyanúgy lehet példányosítani, mint az osztályokat. Nekünk most csak erre lesz szükségünk.
A Java programozási nyelv
Soós Sándor
15/17
Az eseményfigyelő objektumok megvalósítása ●
●
●
●
A java.awt.event csomag interface-ek formájában definiálja a különböző eseményfigyelő objektumok mintáit. Ezekből lehet példányosítani a szükséges objektumokat. Példánkban az ActionListener interface-ből példányosítunk egyet a színezéshez és egyet a Bezárás gomb számára. Ezeket az objektumokat befűzzük a megfelelő nyomógombok eseményfigyelő listájába (addActionListener).
A Java programozási nyelv
Soós Sándor
16/17
Példa: Faktoriális számítás ● ●
Nézzük meg a Faktor.java programot! Ennek mintájára készítsünk egy egyszerű számológépet! – –
legyen benne két beviteli mező, és néhány nyomógomb a különböző műveletek elvégzésére az eredmény jelenjen meg egy Label-ben.
A Java programozási nyelv
Soós Sándor
17/17