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

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.

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

Programozási technológia

JAVA PROGRAMOZÁS 5.ELŐADÁS

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

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

Szoftvertechnológia alapjai Java előadások

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

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

A Java nyelv. Dialógus ablakok. Elek Tibor

Java Programozás 11. Ea: MVC modell

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

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

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

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

Bevezetés a Python programozási nyelvbe

Programozási technológia I. programból! A Gomb4 megoldásból induljunk ki!

Kézikönyv. Szelekciós jegyzék 2.

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

C++ programozási nyelv

Már megismert fogalmak áttekintése

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

Miután létrehoztuk, szeretnénk neki beszédesebb nevet adni. A név változtatásához a következőt kell tenni:

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

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

HVK Adminisztrátori használati útmutató

Java felhasználói felület

Programozás II. 3. gyakorlat Objektum Orientáltság C++-ban

é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

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

Választó lekérdezés létrehozása

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

Java felhasználói felület

C#---Access adatbáziskezelési gyakorlat

Java felhasználói felület

Java felhasználói felület

DebitTray program Leírás

Kézikönyv. Szelekciós jegyzék létrehozása

ContractTray program Leírás

Tájékoztató. Használható segédeszköz: -

Objektumelvű programozás

JAVA PROGRAMOZÁS 2.ELŐADÁS

Osztályok. 4. gyakorlat

Interfészek. PPT 2007/2008 tavasz.

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

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

Dokumentáció. 1. Beadandó feladat

Programozás II. 2. gyakorlat Áttérés C-ről C++-ra

Szoftvertechnolo gia gyakorlat

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

Ügyfélforgalom számlálás modul

Tantárgyfelosztás. I. Ellenőrzés. Mielőtt hozzákezd a tantárgyfelosztás tervezéséhez, ellenőrizze le, illetve állítsa be a következőket:

ELTE SAP Excellence Center Oktatóanyag 1

Hozzunk létre két rekordot a táblában, majd véglegesítsünk (commit):

TABULÁTOROK TÁBLÁZATOK KÉSZÍTÉSE. A táblázatok készítésének lehetőségei:

Programozási nyelvek Java

A d m i n i s z t r á c i ó s f e l a d a t o k a I n t e g r á l t K ö n y v t á r i R e n d s z e r b e n

Online naptár használata

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

Integráció LadyBirddel

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

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

Rövid leírás a Make Your Mark szoftver használatához

3. Beadandó feladat dokumentáció

Taninform KIR kapcsolat

Felhasználói segédlet a Scopus adatbázis használatához

Egzinet Partner Portál

munkafüzet open eseményéhez

Entity Framework alapú adatbáziselérés

Enterprise JavaBeans 1.4 platform (EJB 2.0)

Csavarda mobil áruház

Függőség injekció Konstantinusz Kft 2010

Objektumorientált programozás Pál László. Sapientia EMTE, Csíkszereda, 2014/2015

ZH mintapélda. Feladat. Felület

Java és web programozás

MS ACCESS 2010 ADATBÁZIS-KEZELÉS ELMÉLET SZE INFORMATIKAI KÉPZÉS 1

Ablak és ablakműveletek

OOP #14 (referencia-elv)

Adabáziselérés ODBC-n keresztül utasításokkal C#-ban

Órarendkészítő szoftver

Gyakorlati vizsgatevékenység A

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

1. Mi a fejállományok szerepe C és C++ nyelvben és hogyan használjuk őket? 2. Milyen alapvető változókat használhatunk a C és C++ nyelvben?

Adatintegritás ellenőrzés Felhasználói dokumentáció verzió 2.0 Budapest, 2008.

Programozási technológia

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

Mio Technology Limited C510, C710. Gyors használati utasítás a Mio Map v3 programhoz. Magyar

Építésügyi Monitoring Rendszer (ÉMO) komplex működését biztosító településrendezési tervek digitalizálása EKOP /B kiemelt projekt megvalósítása

ClicXoft programtálca Leírás

Java programozási nyelv 6. rész Java a gyakorlatban

ServiceTray program Leírás

Programozási technikák Pál László. Sapientia EMTE, Csíkszereda, 2009/2010

Cikktípusok készítése a Xarayában

A szerzõrõl... xi Bevezetés... xiii

az adatbevitel szabályozása, alapok

Eseményvezérelt és objektumorientált programozás

Felhasználói útmutató a portal.nakvi.hu oldalhoz

DKÜ ZRT. A Portál rendszer felületének általános bemutatása. Felhasználói útmutató. Támogatott böngészők. Felületek felépítése. Információs kártyák

Átírás:

- Alkalmazásfejlesztési szemlélet megismerése - Java GUI készítés bemutatása Swing-ben - Órai feladat megoldása A gyakorlat keretein belül egy könyvesboltot megvalósító alkalmazást készítünk el lépésről lépésre (BookShop). MVC szemlélet: o Lásd. a mai óra anyagát tartalmazó.ppt -t o http://en.wikipedia.org/wiki/model%e2%80%93view%e2%80%93controller Az alkalamzásunk követi ezt a szemléletet, egyrészt különböző csomagokba vannak rendezve hierarchikusan az osztályaink, másrészt láthatjuk hogy a rétegeknek megfelelő osztályok mind előfordulnak: Customer.java: o Egy Java Bean, a könyvesboltunkba betérő ügyfeleket hivatott modellezni. A Java Bean-ek olyan osztályok, amelyek valós világból vett entitásokat modelleznek, esetünkben az ügyfél összes adatát tartalmazza, és konvencióknak megfelelő módon módosítást/lekérdezést enged meg egységbe zárás. o A lekérdező / módosító eljárásokat getter/setter-nek nevezzük, ezekre biztos láttatok már példát, de ha nem, akkor majd most ebben az osztályban. o Eclipse támogatás a getter/setterek létrehozására: Jobb klikk -> Source -> Generate Getters and Setters (Alt+Shift+S+R) o Figyeljük meg a tostring() metódus felüldefiniálását! BookShopDAO.java: o Az adatelérést megvalósító Data Access Object osztály, adattárolásra és különböző adatmanipulációk megvalósítására szolgál. A mai órán csak a program futása alatt őrizzük meg az adatokat, egyelőre memóriában tárolunk, nem adatbázisban. o Importok automatikus kezelése (szükségesek behúzása ill. nem használtak törlése): Ctrl+Shift+O BookShopController.java: o Ez az osztály vezérli az egész programot, itt indítjuk el az alkalmazást (main metódust ez tartalmazza), valamint összekötő réteget képez a Model és a View réteg között, azaz az adat és a megjelenítés között. o A controller osztálynak mindig van egy Data Access Object (DAO) objektuma, melynek segítségével elvégezzük az egyes adatmanipulációs műveleteinket. Ez az objektum a Model réteget megvalósító osztály egy példánya. o A main metódusban példányosítjuk ezt az osztályt és meghívjuk az alkalmazás GUI-ját példányosító metódust, ami megjeleníti az alkalmazás főablakát. Általában minden adatelérést megvalósító művelethez tartozik egy metódus a controller osztályban, ami ezt vezérli illetve beleviszi az általunk definiált üzleti logikát. Lásd: addcustomer metódus. [ 1 / 6 ] Muhi Kornél 2012. 02. 24.

Konténerek (Containers) - keretek amelyek felületet biztosítanak a GUI elemeknek o JFrame az alkalmazás főablaka o JDialog dialógus ablak o JApplet Java Applet-hez ablak o JWindow egyszerű ablak o JPanel egy belső tároló, segítségével tudjuk az ablakon elhelyezkedő elemeinket csoportosítani és ez alapján valamilyen módon pozícionálni. o JTabbedPane hasonló a JPanel-hez, de ezzel több ilyen Panel-t tudunk kezelni ún. fülecskékkel, amelyek között váltogathatunk. o JSplitPane Osztott képernyőt készíthetünk vele, egymásba ágyazható, az egyes részekbe tartozó Panelek között megoszthatjuk a teret, átméretezhető. o JScrollPane görgethető panel Komponensek (Components) - belső elemek, konténerekbe helyezhetőek o JButton nyomógomb o JLabel címke o JTextField szöveges beviteli mező (egysoros) o JTextArea szöveges beviteli mező (többsoros) o JCheckBox jelölőnégyzet o JRadioButton választógomb o JList lista o JComboBox lenyíló mező o JTree fa o JTable táblázat o JPasswordField jelszómező Elrendezések (Layout managers) a komponensek milyen stratégia szerint kerülnek elhelyezésre a konténerben o BorderLayout: o FlowLayout: [ 2 / 6 ] Muhi Kornél 2012. 02. 24.

o GridLayout: o GridBagLayout o BoxLayout o CardLayout Eseménykezelés (Listeners) - felhasználói vagy egyéb beavatkozás esetén lefutó kód o ActionListener akciókra figyelők o MouseListener egérrel való műveletekre figyelők o KeyListener billentyűzetre figyelők o ItemListener elemekre figyelők (pl. listákban) o FocusListener fókuszra (kijelölés, aktivvá válás) figyelők 1. Labels.java a programban előforduló sztring konstansokat itt gyűjtjük össze. Minden konstans publikus és statikus adattagja a Labels osztálynak, ezekre a programunkban a Labels.azonosito módon hivatkozhatunk. Ez azért jó, mert több helyen lehetnek ugyanazok a sztringek és így egységesen változtathatjuk meg, illetve biztosak lehetünk abban, hogy valamely egyezőségvizsgálatkor ugyanaz a két sztring szerepel (pl. menü eseménykezelőjénél láthatunk erre példát). 2. BookShopMenuBar.java Egy speciális menü osztály, amelyet a JMenuBar-ból származtatunk. Privát adattagként megkapja a GUI-t, így tud rá hivatkozni mint szülőre. Írtunk egy createmenupoint metódust, amelyen belül elkészítünk egy menüpontot, ezt tetszőleges számszor meghívhatjuk attól függően, hogy hány menüpontra van szükségünk. Figyeljük meg ennek a metódusnak a paraméterezését! Az első órán látott változó számú paraméterlistának itt jó hasznát vesszük, hisz tetszőleges számú almenüt rendelhetünk az egyes főmenüinkhez A fő menüpontok JMenu objektumok, míg azok almenüi JMenuItem-ek. A konstruktorban rögtön megadhatjuk a menüelemek feliratát. Minden menüponthoz ill. menühöz az add() metódussal tudunk hozzáadni menüpontot. A menüpontokhoz eseménykezelőt is rendelhetünk az add Listener metódussal, menü esetén az ActionListener interfészt fogjuk implementálni, ez érzékeli azt, ha rákattintottak a vezérlőre. Ahhoz, hogy eseménykezelést rendeljünk az egyes pontokhoz, ebben az osztályban felül kell definiálnunk az actionperformed(actionevent arg0) metódust. Ennek az arg0 paraméterét fogjuk felhasználni arra, hogy eldöntsük mely menüelem lett kiválasztva. Az arg0 objektumnak van egy getactioncommand() metódusa, amely megmondja hogy mi volt annak a menüelemnek a felirata, amelyre kattintottak. [ 3 / 6 ] Muhi Kornél 2012. 02. 24.

Feltételes kifejezésekkel kiszűrhetjük a számunkra érdekelt menüpontokat, és a feltétel teljesülése esetén írjuk meg az abban az esetben végrehajtandó kódot. 3. BookShopGUI.java ez az osztály valósítja meg az alkalmazásunk főablakát. Ezt minden kapcsolódó ablakhoz hozzákötjük és ezen keresztül érhetőek el a Controller réteg műveletei is az egyes ablakok számára. Az alkalmazás főablaka egy JFrame típusú objektum, így az alkalmazás tartalmazni fog egy ilyen típusú adattagot, valamint az előbb említett Controller-t is példányosítja. A startgui() metódusban egy külön szálon elindítjuk a createandshowgui() metódust. Ebben a metódusban definiáljuk a főablakunk paramétereit: mi legyen az ablak fejlécének felirata, a bezárás gombra kattintva valóban bezáródjon, példányosítjuk az előbb áttekintett BookShopMenuBar osztályt, majd az elkészített menüt hozzárendeljük az alkalmazáshoz a setjmenubar() metódussal; beállítjuk az ablak dimenzióit valamint azt hogy látható legyen a felhasználó számára, és indulhat is az alkalmazás. Elkészítjük még emellett a megfelelő getter metódusokat is az alkalmazás főablakának illetve a controllernek az elérésére ezeket fogjuk használni a kapcsolódó ablakokban. 4. AddCustomerDialog.java elérkeztünk a mai alkalmazásunk legbonyolultabb részéhez, az ügyfelek kezelésére szolgáló dialógusablak megvalósításához. Maga a dialógusablak a JDialog-ból származik, valamint mivel eseménykezelést is használunk így implementálja az ActionListener interfészt is. Itt is kell egy serialversionuid, amit automatikusan generáltathatunk vagy megváltoztathatunk az ide másolt ID-ban pár számot, hogy egyedi legyen. A dialógusablak osztálya privát adattagként tartalmazni fogja azokat a vezérlőket, amelyeket az eseménykezelés során felhasználtunk. Itt definiáljuk a különböző beviteli mezőket, választó gombokat stb, ezeket magától értetődően nevezzük el, hogy később könnyen tudjunk rájuk hivatkozni! Hasonlóan itt is bejön a gui mint privát adattag, amint mondtam ezen keresztül érjük majd el az alkalmazás közös vezérlőrétegét. A modal módosító a konstruktorban annyit tesz, hogy ne lehessen a dialógusablak mellé kattintani - amíg nem mondunk valamit (OK v. Cancel), addig nem tűnik el az ablakunk. A super() őskonstruktor hívás példányosít egy dialógusablakot, aminek a szülője a fő gui ablakunk, valamint a paramétertől függően modálissá tesszük. A JDialog osztálynak számos metódusa van, amit itt használni is fogunk. Ne lepődjünk meg, hogy ezen metódushívások előtt nincs semmilyen objektum, hiszen ezek az aktuális objektumra hivatkoznak (az általunk példányosított dialógusablakra) a this kulcsszó használata sem kötelező, csak névütközés esetén. A dialógusablakunk három panelt fog tartalmazni. Az egyik tartalmazza a szükséges beviteli mezőket, a második a parancsgombokat (OK, Cancel stb.), a harmadik pedig ezt a kettőt fogja össze és mondja meg hogy egymáshoz viszonyítva hol helyezkedjenek el. Ezeket mind egy-egy metódusban készítjük el. A settingpanel egy GridLayout elrendezésű panel, amiben tehát táblázatosan foglalnak helyet majd a vezérlők. Sorfolytonosan balról jobbra haladva tölti fel, nem kell címeznünk az egyes cellákat, csak a konstruktorban kell megmondani hogy hányszor hányas táblázatot szeretnénk. Figyeljük meg, hogy itt a JLabel (címke) objektumot csak a felhasználás helyén példányosítjuk, nem is rendelünk hozzá azonosítót. Ez azért van, mert mint mondottam amely vezérlőket felhasználjuk az eseménykezelés során, azok az osztály privát adattagjai lesznek, de ezekre a címkékre nem lesz később szükségünk, csak azt a célt szolgálják hogy valami konstans feliratot megjelenítsenek a felületen. A táblázatunk első oszlopában tehát ezek a címkék lesznek, a másodikban pedig a hozzájuk tartozó beviteli/választó mezők. Nézzük át az ide vonatkozó kódrészletet, nagyon tanulságos ez alapján fel kell tudni építeni egyéb ilyen dialógusablakokat is! A gombokat tartalmazó buttonpanel egy FlowLayout elrendezésű panel, ez pedig azt jelenti, hogy az elemeket sorfolytonosan [ 4 / 6 ] Muhi Kornél 2012. 02. 24.

egymás mellett tartalmazza, amíg van neki hely. Figyeljük meg, hogy gombokhoz eseménykezelőket rendelünk ugyanúgy, mint ahogy menü esetében is tettük! Végül a dialogpanel egy BorderLayout elrendezésű panel, ami a fentebb látott módon tartalmazhat vezérlőket. Mi ebbe most középre elhelyezzük a beviteli mezőket tartalmazó panelt, majd a déli részbe pedig a gombokat tartalmazót. Még egy fontos dolgunk van: megvalósítani az eseménykezelést. A menühöz hasonlóan itt is az actionperformed metódust valósítjuk meg. Ezen belül az e paraméter getsource() metódusát használjuk fel arra, hogy megvizsgáljuk mely vezérlő váltotta ki az eseményt ez a metódus object típusú objektumot ad vissza, amit az == operátor segítségével tudunk a vezérlőinkhez hasonlítani. Ha az OK gombot nyomták meg, akkor példányosítunk egy Customer objektumot az ügyfél adatainak, majd megpróbáljuk beilleszteni az ügyfeleink közé névütközéskor illetve a név mező kitöltetlensége esetén dobunk egy hibaüzenetet a felhasználónak. Ezt a JOptionPane.showMessageDialog() metódussal tudjuk megtenni, ennek paraméterei sorrendben: a. A hibaüzenet szülőablaka a gui-nk ablaka b. A hibaüzenet szövege c. A hibaüzenet ablakának fejlécszövege d. A hibaüzenet típusa (milyen ikon jelenjen meg) A felhasználó adatait az egyes vezérlőkre való hivatkozásokon keresztül nyerjük ki, minden típusú mezőnek megvan az erre megfelelő metódusa (getvalue(), isselected() stb.) ezeket figyeljük meg, járjunk utána. Végül az ügyfelet szeretnénk a memóriába rakni a controllerben megvalósított metóduson keresztül: gui.getcontrol() visszadja az alkalmazáshoz tartozó Controller objektumunkat, ennek pedig meghívjuk a megfelelő addcustomer() metódusát. 5. CustomerTableModel.java a felhasználók adatait táblázatban szeretnénk listázni, erre szolgál ez az osztály. Az AbstractTableModel-ből származik, hasonlóan kell neki UID, mint az előző osztályoknak. Csinálunk egy a fejlécek neveit tartalmazó sztring tömböt valamint a DAO-ban lévő felhasználókat tároló Map-et is felvesszük konstruktorban beállítjuk. Néhány fontos metódust felülírunk (oszlopok számának lekérdezése, sorok száma, adott oszlop neve). Az egyik legfontosabb metódus a public Object getvalueat(int row, int col), ezzel mondjuk meg hogy adott sor adott oszlopában milyen adat szerepel. A memóriában lévő Map-ben az indexelés 1-től indul (a felhasználóhoz rendelt egyedi azonosító), viszont a táblázat 0-tól indexel, ezért a táblázatban szereplő sorszámhoz hozzáadunk 1-et és azzal indexelünk. Leellenőrizzük egyesével hogy hogy mely oszlopra mutattunk és a customer Map-nek a sor-adik indexű elemének tartalmát adjuk vissza. Mivel eredetileg a JTable-ben minden sztring, ezért a getcolumnclass(int c) metódussal megmondhatjuk hogy a c-edik oszlop milyen típusú (lekérdezzük az oszlop első sorában tárolt elem értékét) és annak megfelelően fogja megjeleníteni az oszlopok értékét boolean esetén jelölőnégyzet lesz, szöveges adat esetén szöveg. Az egyes cellák szerkeszthetőségét tiltsuk le az iscelleditable(int row, int col) metódussal. Buy Book menüpont kifejlesztése könyvek megvásárlására szolgáló dialógusablak elkészítése és bekötése az alkalmazásba: o BookShopDAO tárolja memóriában [ 5 / 6 ] Muhi Kornél 2012. 02. 24.

o Következő attribútumokat lehet megadni: 1. Author (TextField) 2. Title (TextField) 3. Year (Spinner) 4. Category (ComboBox) 5. Price (Spinner) 6. Piece (Spinner) 7. Ancient (Boolean): Automatikusan állítsuk be, üzleti logika alapján (BookShopControl) 1900 előtt kiadott könyvekre igaz. Általánosságban minden órán vett példát a semmiből összerakni. 1. Sell Book menüpont kifejlesztése (lásd a ppt-t) [ 6 / 6 ] Muhi Kornél 2012. 02. 24.