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

Hasonló dokumentumok
Java felhasználói felület

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

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

Programozási technológia

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

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

Java felhasználói felület

Java Programozás 11. Ea: MVC modell

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

Szoftvertechnológia alapjai Java előadások

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

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

Programozási technológia

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

Swing. (A javax.swing csomag)

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

JAVA PROGRAMOZÁS 5.ELŐADÁS

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

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

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

VI. Grafikus Java alkalmazások

A Java nyelv. Dialógus ablakok. Elek Tibor

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

Java Programozás 2. Gy: EmpProgram. Grafikus felületű adatkezelő program

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

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

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

Java felhasználói felület

Java felhasználói felület

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

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

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

Java és web programozás

ZH mintapélda. Feladat. Felület

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

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

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

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

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

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

JAVA SE/ME tanfolyam tematika

Concurrency in Swing

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

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

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

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

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

Táblázatok. Táblázatok beszúrása. Cellák kijelölése

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

Már megismert fogalmak áttekintése

Táblázatok kezelése. 1. ábra Táblázat kezelése menüből

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

OOP: Java 8.Gy: Gyakorlás

Thermo1 Graph. Felhasználói segédlet

3. modul - Szövegszerkesztés

és az instanceof operátor

BME MOGI Gépészeti informatika 8.

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

Táblázatos adatok használata

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

OOP #14 (referencia-elv)

GráfRajz fejlesztői dokumentáció

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

I. Szakmai törzsanyag

Java és web programozás

az adatbevitel szabályozása, alapok

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

Access alapok. Megnevezés Művelet Minta. Új adatbázis létrehozása. Új / Üres adatbázis.. Tábla létrehozása tervező nézetben.

Microsoft Word előadás. Bevezetés az informatikába I.

Információs technológiák 2. Gy: CSS, JS alapok

3. Osztályok II. Programozás II

POSZEIDON dokumentáció (1.2)

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.

DebitTray program Leírás

ContractTray program Leírás

VII. Appletek, grafika

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

Osztályok. 4. gyakorlat

Java felhasználói felület

JAVA PROGRAMOZÁS 4.ELŐADÁS

Lakóház tervezés ADT 3.3-al. Segédlet

A Microsoft OFFICE. EXCEL táblázatkezelő. program alapjai as verzió használatával

Alapvető beállítások elvégzése Normál nézet

A Windows az összetartozó adatokat (fájlokat) mappákban (könyvtárakban) tárolja. A mappák egymásba ágyazottak.

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

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

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

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

Szoftvertechnolo gia gyakorlat

Feladatok megoldásai

Alapok (a K2D rendszer alapjai)

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

E-Freight beállítási segédlet

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

CÍMLISTA HASZNÁLATA. Címlista alapok

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

Szabadkai Műszaki Szakfőiskola. Web programozás. dr Zlatko Čović

Java és web programozás

Az importálás folyamata Felhasználói dokumentáció verzió 2.1.

Átírás:

Java Programozás 8. Ea: GUI Graphical User Interface 90/1 B ITv: MAN 2018.02.05

Java GUI 90/2

Minimal version 90/3

GUI Javaban A Java három beépített keretrendszere GUI készítéséhez: AWT Abstract Window Toolkit Az operációs rendszer natív grafikus elemeit használja Swing A Java grafikai eszközeit használva megrajzolja a komponenseket Az AWT-t egészíti ki, de NEM helyettesíti azt JavaFX Szintén Javát használva hozza létre az ablakot A Swing utódjának szánják 90/4

GUI Javaban AWT java.awt csomag Az 1.0 verziótól a Java része Gyors, a host oldali C kódot (peer code) hívja Nem 100%-ban platform független (pontosabban nem mindenhol működik teljesen ugyanúgy) A host operációs rendszer kinézetével egyező megjelenést biztosít Korlátozott funkcionalitást biztosít, nehezebben portolható, de gyors 90/5

GUI Javaban Swing 90/6 javax.swing csomag Amit lehet, Java kóddal valósít meg azaz az alapszintű rajzoló utasításokkal maga rajzolja meg az egyes elemeket (emiatt lassabb, mint az awt) Minden környezetben pontosan ugyanúgy működik A host kinézetére hasonlító, de mindenhol egységes megjelenést ad Fejlettebb funkciókat biztosít, de az alapok megegyeznek az AWT-vel Eseménykezeléshez az AWT biztosította lehetőségeket használja (ill. egészíti ki) A J2SE 1.2 verzióban jelent meg

GUI Javaban javafx java.fx csomag A Java SE 8-ban jelent meg Asztali és böngészős alkalmazásokhoz is A Swinghez hasonló, de több funkcionalitást nyújt CSS támogatása Egyszerűbb elrendezés menedzselés Animációk és 3D grafika támogatása 90/7

A java.awt csomag lényegi része Object Component Container Button Canvas Checkbox A java.awt csomag (részlete) Panel Choice Window Label Class Abstract Class List Frame Dialog Scrollbar TextField TextComponent TextArea 90/8

Az awt csomag felépítése A Component osztály tartalmazza az összes komponenst, és kb. 200 publikus metódust A Container osztályok más komponensek befogadására szolgálnak A Window osztály tartalmazza a legfelső szintű látható komponenseket, a Frame és a Dialog osztályokat, melyekben különböző látható komponensek lehetnek A Panel osztály egy olyan felső szintű konténer osztály, melyben alsóbb szintű grafikus elemek lehetnek, pl. Button, Label Az awt osztály sok elemi komponenst tartalmaz (Button, Label ) ezekből igen bonyolult felület építhető föl 90/9

A javax.swing csomag lényegi része Object Component JTextCompnent JComboBox JTextField JTextArea A javax.swing csomag (részlete) Container JLabel JList Class JComponent JMenuBar Abstract Class Window Frame Dialog JOptionPane JPanel JScrollbar JToggleButton JButton JCheckBox JRadioButton JFrame JDialog AbstractButton JMenuItem JMenu 90/10

A swing csomag felépítése A swing csomag az 1.2-es Java verzióban jelent meg Nem része a Javanak, hanem annak kiterjesztése, erre utal a javax.swing csomagnév A csomag óriási javulást hozott az awt csomaghoz képest, mind képességekben, kinézetben, testre szabhatóságban, mind a grafikus elemek mennyiségében. A Swing osztályok az eredeti awt csomag alsóbb szintű osztályaira épülnek. Az új, mindig "J" betűvel kezdő komponensek, a Container és Component osztályok leszármazottai. 90/11

GUI Javaban A grafikus felület programozásának menete: 1. A felhasználói felületek összepakolása (többnyire előre megírt) komponensekből (létezik kényelmes grafikus fejlesztő környezet rá) 2. Eseménykezelések megírása, az események hatására többnyire a felhasználói felületen módosítunk. 90/12

Grafikus komponensek Konténer komponensek: beletehetők más komponensek, akár konténerek is. Tovább csoportosítható: Csúcs konténer: az ablakozó rendszer ablakot biztosít neki (pl. Jframe, JDialog) (egy alkalmazás főablaka vagy felbukkanó párbeszéd ablaka) Nem csúcs konténer: nincs saját ablaka (pl. JPanel), szerepe a belerakott komponensek csoportosítása. Elemi komponensek: Nem tehetők bele más komponensek. (pl. JButton, JLabel) 90/13

Komponens fa A komponensek egymásba ágyazhatók szülő-gyermek reláció Szülő komponens: az a konténer, amelybe beleraktunk egy másik komponenst Gyermek komponens: az a komponens (lehet konténer), amelyet beleraktunk a konténerbe A gyermekeknek lehetnek gyermekei Tehát fastruktúra alakul ki, amelynek a csúcsa egy csúcs konténer lehet A szülő felelős a gyermekei megjelenéséért (de nem ő jeleníti meg) 90/14

Komponens fa JFrame JPanel JButton JPanel Jlabel JTextField Jlabel JTextField JButton JButton JButton 90/15

Komponens tulajdonságai A tulajdonságainak beállításával testre szabhatjuk a komponenst. A tulajdonságok komponensenként mások, de vannak minden komponensre jellemzőek, pl. megjelenéssel kapcsolatosak: méret, pozíció, stb. A közös tulajdonságok célszerűen a közös ősben definiáltak. A komponenseken események történhetnek, amelyekre reagálhatunk, azaz írhatunk kódot, ami meghívódik az esemény hatására. 90/16

Komponensek eseményei Események: 90/17 Többnyire felhasználói akciók (pl. egér mozgatása, billentyű leütés), de lehetnek komponens események is (pl. ablak eltakaródása, scrollbar scrollozódása) Az eseménynek van forrása: az a komponens, amelyen keletkezett az esemény (pl. egér kattintás esetén, amely felett állt az egér, billentyű leütésnél amelyik a billentyű fókusz) Esemény kezelés: a keletkezett események egy várakozó sorba kerülnek, ahonnan az eseménykezelő végtelen ciklus kiveszi és feldolgozza. Vagyis: a VM meghívja a programozó által az eseményekhez írt eseménykezelő kódokat. Amelyik eseményhez nem írunk eseménykezelő kódot, arra természetesen nem történik semmi sem.

A grafikus program szerkezete Egy GUI program esetén szokás, hogy minden csúcs konténer (ablak) külön osztályban van definiálva. Ebben található az ebből a csúcsból induló komponensfa összepakolása, valamint az ezekhez tartozó eseménykezelő kódok. Természetesen kell egy main metódus valahol, amelynek feladata megjeleníteni az alkalmazás fő ablakát. Egy minimális program tehát egy olyan osztály, amelyben a főablakot pakoljuk össze és írjuk meg az ezeken előfordulható eseményekre reagálást. 90/18

A grafikus program Egy GUI-s java program futása ugyanúgy zajlik, mint bármely más programé Fontos viszont tudni, hogy az első grafikus komponens megjelenítéskor a VM elindít egy eseménykezelő szálat, ebben fut majd az összes eseménykezelő kód. A programozó feladata gondoskodni arról, hogy ne lépjen fel konkurencia probléma. 90/19

AWT (Abstract Window Toolkit) A korábbi megvalósítás Cél: hardverfüggetlenség, platform függetlenség Cél megvalósítása: nehéz súlyú komponensekkel, azaz a gép ablakozó rendszerétől kéri a komponens létrehozását, megjelenítését. Ennek hátrányai: Eltérő ablakozó rendszerben, eltérő a megjelenés A komponensek kinézete nem változtatható Csak olyan komponensek lehetnek, amelyek minden ablakozó rendszerben léteznek, tehát csak a legalapvetőbb komponensek Ma már a grafikus komponenseit nem használjuk, a többi részét (pl. eseménykezelés, egyéb komponensek) igen. 90/20

Swing Újabb megoldás A cél a ugyanaz, mint AWT-nél, de annak hibái nélkül Megoldás: pehelysúlyú komponensek, azaz teljesen java-ban megvalósított komponensek, amelyek csak az alapvető rajzolási funkciókat kéri az ablakozó rendszertől. Előnyei: A kinézet is programozható Sok grafikus komponens Könnyen létrehozható benne új grafikus komponens is 90/21

1. 2. 3. 4. 5. 6. Grafikus Helló Világ import javax.swing.*; public class HelloGr { public static void main(string[] args) { JFrame Foablak = new JFrame("Grafikus Hello"); Foablak.setBounds(0,0,260,150); Foablak.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Foablak.getContentPane().setLayout(null); JLabel Felirat = new JLabel("Helló világ"); Felirat.setBounds(30, 10, 100, 20); Foablak.getContentPane().add(Felirat); Foablak.setVisible(true); xk yk xm y ym Jframe(s): Egy üres grafikus keret (névvel) setbounds(xk,yk,xm,ym): kezdőpont, méret setdefaultcloseoperation: az ablak bezárásakor lefutó metódus setlayout(null): az elrendezés szervező kikapcsolása Jlabel(s): felirat(szöveg) setvisible(t, f): láthatóság be(ki)kapcsolása 7. 8. x 90/22

90/23 Grafikus Helló Világ JFrame: legfelső szintű konténer, amely egy képernyőn megjeleníthető ablakot reprezentál. Részei: Root Pane: a képernyő és a tartalom közötti menedzser osztály, közvetíti a tartalmat és a felhasználói eseményeket a megjelenítő felé. Layered Pane: vezérli az egymás fölé kerülő elemek láthatóságát Content Pane: a JFrame alapértelmezett tartalma, egy üres konténer, mely BorderLayout tartalom elrendezőt használ Glass Pane: a JFrame fölötti speciális események kezelő panelje (felhasználói beavatkozások, frame előtti (fölötti) rajzolás ) frame.getcontentpane().add(elem): A tartalom konténer elvétele a frame-től, és az ehhez történő elem hozzáadás kódja. Így lehet hozzáférni egy frame alapértelmezett tartalmához.

Grafikus Helló Világ 2 import javax.swing.*; public class HelloGr2 { private static void createandshowgui() { JFrame Foablak = new JFrame("Grafikus Hello"); Foablak.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JLabel Felirat = new JLabel("Helló világ"); Foablak.getContentPane().add(Felirat); Foablak.pack(); Foablak.setVisible(true); 90/24 public static void main(string[] args) { javax.swing.swingutilities.invokelater(new Runnable() { public void run() { createandshowgui(); );

Grafikus Helló Világ 2 Ugyanez még egyszer egy kicsit helyesebben: Elrendezés szervezőre (tartalom elrendezőre) bízva a méret és pozíciókat A JPanel alapértelmezett elrendezője: FlowLayout (folyamatos elrendezés) Az eseménykezelő szálban létrehozva a GUI-t, bár erre mivel most nem kezelünk eseményt (így nem fordulhat elő konkurencia probléma) nincs szükség. Újdonságok pack() átszámoltatja az elrendezés szervezőkkel a méreteket, és a pozíciókat SwingUtilities.invokeLater az eseménykezelő szálban futtatja a kódot 90/25

Példakód import javax.swing.*; public class Pld_2 extends JFrame { private String bm="bitman mondja:"; public Pld_2() { settitle("pld_2"); setsize(300, 150); setlocationrelativeto(null); JPanel dp = new JPanel(); dp.setlayout(null); this.getcontentpane().add(dp); JLabel jl1 = new JLabel ("Adat:"); dp.add(jl1); jl1.setbounds(10,20,80,20); JTextField jtf1 = new JTextField(""); dp.add(jtf1); jtf1.setbounds(80,20,80,20); settitle(s): a frame felirata setsize(x,y): a frame mérete setlocationrelativeto(null): a frame középre helyezése Jpanel(): Panel konténer this.getcontentpane(): a frame tartalma add():hozzáadás a tartalomhoz JTextField(s): szövegbeviteli mező 90/26

Példakód JButton bo = new JButton(); bo.settext("ok"); dp.add(bo); bo.setbounds(180,18,60,24); JButton bc = new JButton(); bc.settext("bezár"); dp.add(bc); bc.setbounds(110,70,80,24); public static void main (String args[]) { Pld_2 p2 = new Pld_2(); p2.setdefaultcloseoperation(jframe.dispose_on_close); p2.setvisible(true); 90/27

Példakód JButton bo = new JButton(); bo.settext("ok"); dp.add(bo); bo.setbounds(180,18,60,24); bo.addactionlistener( new ActionListener() { public void actionperformed(actionevent e) { JOptionPane.showMessageDialog( null,"megnyomtad a gombot!", bm,1); ); JButton bc = new JButton(); bc.settext("bezár"); dp.add(bc); bc.setbounds(110,70,80,24); bc.addactionlistener( new ActionListener() { public void actionperformed(actionevent e) { dispose(); setvisible(false); ); 90/28

Kattintás eseménykezelése addactionlistener(): kattintást lekezelő eseménykezelő hozzáadása Paramétere az eseménykezelő objektum: ActionListener, mely megvalósítja az ActionPerformed(ActionEvent e) metódust. Ez a metódus hívódik meg, ha egérrel rákattintunk az objektumra, az ebben megadott kód hajtódik ilyenkor végre. dispose(): a frame összes elemének eltávolítása a memóriából setvisible(t,f): az elem láthatóságának beállítása(igaz, hamis) JOptionPane.showMessageDialog(T, Ü, F, I) - Üzenetablak megjelenítése. A megjelenő ablak modális, ez kb. azt jelenti, hogy amíg le nem OKézzuk, nem folytathatjuk a főprogram használatát! T - A tulajdonos (most null, vagyis nincs definiálva) Ü A panelen megjelenő üzenet szövege F - A panel címe, felirata (most a globális bm string) I - A panel ikonja (0-Stop, 1-Info, 2-Figyelmeztetés, 3-Kérdés) 90/29

90/30

Tartalom elrendezők Javaban a grafikus felület kinézetét, az egyes grafikus elemek elrendezését a különböző Layout osztályok segítségével állíthatjuk be. Ezek az osztályok a java.lang.object-ből származnak és implementálják a java.awt.layoutmanager és java.io.serializable interfészeket. Az egyes Layout objektumokat önmagukban is használhatjuk egyszerűbb felületeknél, de általában többféle elrendezés kombinációjaként jön létre a kívánt elrendezés. 90/31

Tartalom elrendezők Az alapértelmezett tartalom elrendező a FlowLayout: Folyamatos elrendezés. Amíg férnek a komponensek, egy sorban helyezkednek el, egymás mellett, vízszintesenközépre igazítva. Ha átméretezzük a panelt, több sorba kerülnek, ha túl sok az alkatrész, az utolsó lelógnak a panelről. 90/32

Tartalom elrendezők BorderLayout Szélekhez igazítás, elrendezés az égtájaknak megfelelően. A helyfoglalás az elhelyezés sorrendjében történik. Az elsőként elhelyezett elfoglal egy szeletet a panelen, a második a maradék panelből foglal egy szeletet... Legfeljebb öt komponens helyezhető el. 90/33

Tartalom elrendezők GridLayout: Komponensek elhelyezése egy rácsrendszeren. new GridLayout(S,O); S: sorok száma, O: oszlopok száma. Ha megadjuk a sorok számát, az oszlopok számát nem veszi figyelembe a program. Ha a sorok száma 0, akkor az oszlopok száma alapján pakolja a program a komponenseket. A képen látható elrendezés: GridLayout(2,0); 90/34

Tartalom elrendezők További lehetőségek: CardLayout: A panelt kártyacsomagra bontja, s az egyes kártyáknak saját LayoutManager-ük van. Egy adott időben csak egy kártya jelenik meg. A felhasználó az egyes kártyák között ugrálhat, melyeken különböző komponensek vannak. 90/35

Tartalom elrendezők További lehetőségek: GridBagLayout: A GridBagLayout a legprecízebb az öt AWT LayoutManager között. Hasonlít a GridLayout-ra, de a komponenseknek nem kell azonos méretűnek lenni. Minden komponens egy vagy több cellát is elfoglalhat, továbbá az elhelyezési sorrend nem szükségszerűen bal fentről kiindulva sorrendben haladó. 90/36

90/37

Példakód JCheckBox import javax.swing.*; import java.awt.event.*; public class Pld_4 extends JFrame { private String bm="bitman mondja:"; private JCheckBox cb1, cb2; private boolean cb1b=false, cb2b=true; private String cb1s="lassan", cb2s="ésszel"; 90/38 public static void main (String args[]) { Pld_4 fm = new Pld_4(); fm.setdefaultcloseoperation(jframe.dispose_on_close); fm.setvisible(true); public Pld_4() { settitle("jelölőnégyzet Példa"); setsize (300, 100); JPanel dp = new JPanel(); dp.setlayout (null); this.getcontentpane().add(dp);

Példakód JCheckBox cb1 = new JCheckBox("Gyorsan"); dp.add(cb1); cb1.setbounds(10,20,80,20); cb1.addactionlistener(new ActionListener() { public void actionperformed(actionevent e) { if (cb1.isselected()) { cb1b = true; cb1s = "Gyorsan"; else { cb1b = false; cb1s = "Lassan"; JOptionPane.showMessageDialog(null, cb1s, bm, 1); ); 90/39

Példakód JCheckBox 90/40 cb2 = new JCheckBox("Ésszel"); dp.add(cb2); cb2.setbounds(100,20,80,20); cb2.addactionlistener(new ActionListener() { public void actionperformed(actionevent e) { if (cb2.isselected()) { cb2b = true; cb2s = "Ésszel"; else { cb2b = false; cb2s = "Ész nélkül"; JOptionPane.showMessageDialog(null, cb2s, bm, 1); ); cb2.setselected(true);

JCheckBox Jelölőnégyzet. Önálló, ki-, bekapcsolható tulajdonságok. 90/41 Érdemes minden jelölőnégyzethez egy-egy globális logikai változót hozzárendelni (itt cb1b és cb2b), és ezek értékét a változásoknak megfelelően módosítani, így a programban bárhol, bármikor felhasználhatjuk az értéküket. isselected() - Az eseménykezelőben ezzel a metódussal vizsgálható a jelölőnégyzet aktuális értéke. setselected(true, false) - Ezzel a metódussal lehet kódból beállítani a jelölőnégyzet aktuális értékét. Ha induláskor true-ra állítjuk, a hozzátartozó logikai változó is true-ról induljon! Használhatjuk a jelölőnégyzeteket úgy is, hogy egy-egy szöveges változót rendelünk hozzájuk (itt cb1s és cb2s), és ezek értékét módosítgatjuk.

Példakód JRadioButton import javax.swing.*; import java.awt.event.*; public class Pld_5 extends JFrame { private String bm="bitman mondja:"; private JRadioButton jrb1, jrb2, jrb3; private String szin="kék"; 90/42 public static void main (String args[]) { Pld_5 fm = new Pld_5(); fm.setdefaultcloseoperation(jframe.dispose_on_close); fm.setvisible(true); public Pld_5() { settitle("rádiógombok Példa"); setsize (300, 100); JPanel dp = new JPanel(); dp.setlayout (null); this.getcontentpane().add(dp);

Példakód JRadioButton 90/43 jrb1 = new JRadioButton("Piros"); dp.add(jrb1); jrb1.setbounds(10,20,70,20); jrb1.addactionlistener( new ActionListener() { public void actionperformed( ActionEvent e ) { if (jrb1.isselected()) { szin = "Piros"; JOptionPane.showMessageDialog(null, szin, bm, 1); ); jrb2 = new JRadioButton("Kék"); dp.add(jrb2); jrb2.setbounds(80,20,70,20); jrb2.addactionlistener( new ActionListener() { public void actionperformed( ActionEvent e ) { if (jrb2.isselected()) { szin = "Kék"; JOptionPane.showMessageDialog(null, szin, bm, 1); );

Példakód JRadioButton 90/44 jrb3 = new JRadioButton("Zöld"); dp.add(jrb3); jrb3.setbounds(150,20,70,20); jrb3.addactionlistener( new ActionListener() { public void actionperformed( ActionEvent e ) { if (jrb3.isselected()) { szin = "Zöld"; JOptionPane.showMessageDialog(null,szin,bm,1); ); ButtonGroup bg = new ButtonGroup(); bg.add(jrb1); bg.add(jrb2); bg.add(jrb3); jrb2.setselected(true);

JRadioButton Rádiógomb. Olyan tulajdonságok kiválasztására használható, ahol a tulajdonságok közül mindig csak egy lehet kiválasztva, de egynek mindig ki kell lennie választva. 90/45 Régen (1950-as, 60-es évek) a rádiókon nyomógombokkal lehetett csatornát váltani. Ha valamelyik gombot benyomtuk, a többi automatikusan kiugrott, egyszerre csak egy lehetett benyomva. isselected() - Az eseménykezelőben ezzel a metódussal vizsgálható a rádiógomb aktuális értéke. Mivel a program biztosítja, hogy csak egy tulajdonság lehessen aktív, ezért elég az aktív állapotot vizsgálni.

JRadioButton Rádiógomb. Olyan tulajdonságok kiválasztására használható, ahol a tulajdonságok közül mindig csak egy lehet kiválasztva, de egynek mindig ki kell lennie választva. ButtonGroup - Segítségével kialakítható a rádiógombok csoportja. A csoport biztosítja a rádiógomb elevet, nélküle minden rádiógomb önálló életet él, vagyis kerek jelölőnégyzetként funkcionál. A négyzet körösítése :-) add() - A gombcsoporthoz így adhatók hozzá az önálló gombok. setselected(true) - Ezzel a metódussal lehet kódból beállítani a gombcsoport aktív (kiválasztott) gombját. Ha induláskor nem használjuk, a megjelenő panelen egyetlen 90/46 gomb sem lesz aktív!

Példakód JComboBox import javax.swing.*; import java.awt.event.*; public class Pld_6 extends JFrame { private String bm="bitman mondja:"; private JComboBox jcb; private String sel="válassz!"; private JLabel jl2; 90/47 public static void main (String args[]) { Pld_6 fm = new Pld_6(); fm.setdefaultcloseoperation(jframe.dispose_on_close); fm.setvisible(true); public Pld_6() { settitle("lista Példa"); setsize (300, 145); JPanel dp = new JPanel(); dp.setlayout (null); this.getcontentpane().add(dp);

Példakód JComboBox 90/48 JLabel jl1 = new JLabel("X="); dp.add(jl1); jl1.setbounds(160,10,20,20); jl2 = new JLabel(sel); dp.add(jl2); jl2.setbounds(180,10,100,20); String elem[] = {"Válassz!","Első","Második","Harmadik"; jcb = new JComboBox(); dp.add(jcb); jcb.setbounds(10,10,120,20); for (String s: elem) jcb.additem(s); jcb.addactionlistener(new ActionListener() { public void actionperformed(actionevent e) { sel = (String)jcb.getSelectedItem(); jl2.settext(sel); );

JComboBox Legördülő lista additem() Elem(ek) hozzáadása a listához. Itt épp egy tömb segítségével. getselecteditem() Visszaadja a kiválasztott objektumot Ezért kell stringgé konvertálni, ha a vezérlőváltozót stringként tároljuk A lista testre szabható, elemei szerkeszthetők, megoldható a többszörös elem kiválasztás, és sok egyéb más is 90/49

Példakód Jspinner(Number) private JSpinner jsp; private String szam="50"; SpinnerModel model = new SpinnerNumberModel(50, 0, 101, 1); jsp = new JSpinner(model); dp.add(jsp); jsp.setbounds(15,15,130,24); jsp.addchangelistener(new ChangeListener() { public void statechanged(changeevent e) { szam = jsp.getvalue().tostring(); if (szam.equals("0")) jsp.setvalue(100); if (szam.equals("101")) jsp.setvalue(1); ); JButton ok = new JButton(); ok.settext("ok"); dp.add(ok); ok.setbounds(180,15,60,24); ok.addactionlistener( new ActionListener() { public void actionperformed( ActionEvent e ) { JOptionPane.showMessageDialog(null,"A szam: "+szam, bm, 1); 90/50 );

Jspinner (Number) Pörgettyű, amelynek értéke kis nyilakkal módosítható. SpinnerModel - Pörgettyű modell, lehet szám-, szöveg-, dátum jellegű. SpinnerModel(I, A, F, L) - Számörgettyű modell. 90/51 I - Induló érték A - Alsó érték (legkisebb felvehető érték) F - Felső érték (legnagyobb felvehető érték) L - Lépésköz Az egyes paraméterek valós típusok is lehetnek, pl: (5.25, 0, 10, 0.25) getvalue() - A pörgettyű aktuális értékének lekérdezése. Object-tel tér vissza, ezért mindig olyan formátumúvá kell konvertálni, amilyet a kezelt adat igényel. setvalue(x) - A pörgettyű kijelzett értékének beállítása. Okosság: ha egy lépésköznyivel kibővítjük a megengedett határokat, és az eseménykezelőben a határpontok elérésekor a túloldali határpontra állítjuk a kijelzett értéket, akkor körbeforgó pörgettyűt készíthetünk. Jelen példában 1 és 100 között mozog az érték, így 0-nál 100-ra, 101-nél 1-re ugrik a kijelzés.

Példakód Jspinner(List) SpinnerListModel splm = new SpinnerListModel( new String[] {"0","Hapci","Morgó", "Kuka","Tudor","Vidor", "Szendi","Szundi","1"); jsp = new JSpinner(splm); dp.add(jsp); jsp.setbounds(15,15,130,24); jsp.setvalue("hapci"); jsp.addchangelistener(new ChangeListener() { public void statechanged(changeevent e) { torp = jsp.getvalue().tostring(); if (torp.equals("0")) jsp.setvalue("szundi"); if (torp.equals("1")) jsp.setvalue("hapci"); ); Körbeforgó szövegpörgettyű. SpinnerListModel - A lista elemei egy string tömbbel definiálhatók. 90/52

Példakód Jspinner(Date) private SimpleDateFormat sdr; sdr = new SimpleDateFormat("yyyy.MM.dd"); java.util.date today = new java.util.date(); //mai dátum! idop = sdr.format(today).tostring(); jsp = new JSpinner(new SpinnerDateModel()); String minta = ((SimpleDateFormat)sdr.getDateInstance()).toPattern(); jsp.seteditor(new JSpinner.DateEditor(jsp, minta)); dp.add(jsp); jsp.setbounds(15,15,130,24); jsp.setvalue(today); jsp.addchangelistener(new ChangeListener() { public void statechanged(changeevent e) { Object value = jsp.getvalue(); idop = sdr.format(value).tostring(); ); 90/53

Jspinner (Date) SimpleDateFormat Kódokkal definiálható dátumformátum import java.text.simpledateformat; getdateinstance() - A dátum formátumának lekérdezése topattern() - A formátum stringgé alakítása seteditor - A pörgettyű módosító logikájának beállítása DateEditor(P, M) - Új pörgettyű módosító logika megadása P - Pörgettyű M - Mintázat, vagyis a dátum formátumának a stringje 90/54

Jtable TableModel import javax.swing.table.defaulttablemodel; public class TM extends DefaultTableModel { public TM (Object fildnames[], int rows){ super(fildnames, rows); public boolean iscelleditable(int row, int col) { return false; public Class<?> getcolumnclass(int index){ //Egyetlen sor, egyetlen cellája sem szerkeszthető if(index == 2){return(Integer.class); return(string.class); //A 2-es oszlop integer, a többi string típusú A táblázat kezelése egy táblamodellel kezdődik. A modellben lehet megadni az egyes mezők szerkeszthetőségét, és a mezők típusát. A DefaultTableModel leszármaztatásával jön létre, konstruktorában kapja meg a mezőneveket, és az oszlopok számát. 90/55

Példakód JTable import javax.swing.*; public class Table1 extends JFrame { private TM tm; private JTable t; public Table1() { settitle("táblázat példa"); setsize (300, 150); JPanel dp = new JPanel(); dp.setlayout (null); this.getcontentpane().add(dp); 1. 2. 3. 90/56 Object tnev[] = {"Kód","Név","IQ"; tm = new TM( tnev,0 ); tm.addrow(new Object[]{"HB25RD","Kis Béla",89); tm.addrow(new Object[]{"WDNO0Y","Makk Éva",105); tm.addrow(new Object[]{"PDA92W","Jó Gabi",114); tm.addrow(new Object[]{"ELIT66","Okos Joe",137); tm.addrow(new Object[]{"RAIN6M","Buta Joe",77);

Példakód JTable 4. 5. t = new JTable(tm); JScrollPane jsp = new JScrollPane(t); dp.add(jsp); jsp.setbounds(10,10,210,80); public static void main (String args[]) { Table1 fm = new Table1(); fm.setdefaultcloseoperation(jframe.dispose_on_close); fm.setvisible(true); 90/57

JTable A táblázat megjelenítésének célszerű sorrendje: 90/58 1. Mezőnevek megadása 2. Táblamodell példányosítása (tm, létrejön a mezőnevekkel, és 0 sorral) 3. Ha már létezik a táblamodell példány, hozzá lehet adni sorokat Fontos: a táblamodell példányban módosítjuk az adatokat tm.addrow( ); - sor hozzáadása tm.removerow(i); - az i. sor törlése 4. Tábla (JTable) példányosítása a táblamodell alapján t = new JTable(hgtm); 5. Célszerű a táblázatot egy görgetősávos panelre szerelni, és a panelt megjeleníteni JScrollPane jsp = new JScrollPane(t); dp.add(jsp); 6. Megnézni az alkotást, és gyönyörködni!

Példakód JTable t = new JTable(tm); JScrollPane jsp = new JScrollPane(t); dp.add(jsp); jsp.setbounds(10,10,210,80); 1. 2. 3. 4. 5. 6. TableColumn tc = null; for (int i = 0; i < 3; i++) { tc = t.getcolumnmodel().getcolumn(i); if (i == 0) {tc.setpreferredwidth(80); else if (i == 2) {tc.setpreferredwidth(50); else {tc.setpreferredwidth(100); t.setautocreaterowsorter(true); TableRowSorter<TM> ts = (TableRowSorter<TM>)t.getRowSorter(); ts.setsortable(0,false); 90/59

JTable Oszlopszélesség beállítás: 1. TableColumn - Táblázat oszlop 2. getcolumnmodel() - Az táblamodelltől lekérdezi az oszlopmodellt getcolumn(i) - Az i-edik oszlop lekérdezése az oszlopmodelltől 3. setpreferredwidth(x) - Oszlopszélesség beállítása százalékban Adatsorok rendezése: 90/60 4. setautocreaterowsorter(true); - Automatikus adatsor-rendezés bekapcsolása 5. TableRowSorter<táblamodell> - Táblázat adatsor-rendező getrowsorter() - Az adatsor-rendező lekérdezése a táblamodelltől 6. setsortable(x,false) - A rendezhetőség ki- vagy bekapcsolása az x. oszlopra Rendezéshez rá kell kattintani az megfelelő oszlopnévre, az oszlopnév mellett megjelenő nyílhegy jelzi a rendezés növekvő vagy csökkenő jellegét.

Példakód JTabbedPane import java.awt.*; import javax.swing.*; public class TP extends JFrame { private JTabbedPane jtp; private JPanel dp, jp1, jp2, jp3; private Font fnt = new Font("Arial", Font.BOLD, 24); public TP() { settitle("fülespanel Példa"); setsize (300, 150); JPanel dp = new JPanel(); dp.setlayout (null); this.getcontentpane().add(dp); jtp = new JTabbedPane(); 90/61 jp1 = new JPanel(); jp1.setlayout(null); JLabel jl1 = new JLabel ("P1"); jp1.add(jl1); jl1.setbounds(20,10,50,20); jl1.setfont(fnt);

Példakód JTabbedPane jp2 = new JPanel(); jp2.setlayout(null); JLabel jl2 = new JLabel ("P2"); jp2.add(jl2); jl2.setbounds(20,10,50,20); jl2.setfont(fnt); jp3 = new JPanel(); jp3.setlayout(null); JLabel jl3 = new JLabel ("P3"); jp3.add(jl3); jl3.setbounds(20,10,50,20); jl3.setfont(fnt); jtp.addtab("p1", jp1); jtp.addtab("p2", jp2); jtp.addtab("p3", jp3); dp.add(jtp); jtp.setbounds(10,10,260,90); public static void main(string[] args) { TP gk = new TP(); gk.setdefaultcloseoperation(jframe.exit_on_close); gk.setvisible(true); 90/62

JTabbedPane Füles panel 1. Létrehozunk egy füles panelt, 2. Mminden füléhez készítünk egy-egy panelt, 3. Rászereljük a panelekre az alkatrészeket (most egy-egy nagybetűs feliratot), 4. Hozzárendeljük a paneleket a fülekhez, 5. Megjelenítjük a füles panelt. Kész. Font(N, S, M) - Font létrehozása 90/63 N - Fonttípus (Használhatók a telepített fontok (Arial, Times New Roman...) és néhány szimbolikus font (Serif, SansSerif, Monospaced, Dialog...) S - Stílus (PLAIN-normál, BOLD-félkövér, ITALIC-dőlt) M - Méret (általában 10-48, de int tip. számot elfogad)

Példakód JMenu import java.awt.event.*; import javax.swing.*; public class MN extends JFrame implements ActionListener { private JMenu menu1, menu2, menu3, menuker; private JMenuItem lista1, beszur1, torol1, kilep; private JMenuItem kaz, knev, kiq; private JCheckBoxMenuItem jcbm; private JMenuBar menusor; private JLabel szoveg; public MN() { settitle("menü Példa"); setsize (300, 185); 90/64 JPanel dp = new JPanel(); dp.setlayout (null); this.getcontentpane().add(dp); szoveg = new JLabel ("Felirat"); dp.add(szoveg); szoveg.setbounds(20,40,200,20);

Példakód JMenu menu1 = new JMenu("Adatok"); menu1.setmnemonic(keyevent.vk_1); lista1 = new JMenuItem("Lista"); lista1.setmnemonic(keyevent.vk_l); lista1.addactionlistener(this); beszur1 = new JMenuItem("Beszúrás"); beszur1.setmnemonic(keyevent.vk_b); beszur1.addactionlistener(this); torol1 = new JMenuItem("Törlés"); torol1.setmnemonic(keyevent.vk_t); torol1.addactionlistener(this); kilep = new JMenuItem("Kilépés"); kilep.setmnemonic(keyevent.vk_k); kilep.addactionlistener(this); menuker = new JMenu("Keresés"); menuker.setmnemonic(keyevent.vk_r); 90/65 ALT + R kaz=new JMenuItem("Azonosítóra..."); kaz.setmnemonic(keyevent.vk_a); kaz.addactionlistener(this); knev = new JMenuItem("Névre..."); knev.setmnemonic(keyevent.vk_n); knev.addactionlistener(this); kiq = new JMenuItem("IQ-ra..."); kiq.setmnemonic(keyevent.vk_i); kiq.addactionlistener(this); menuker.add(kaz); menuker.add(knev); menuker.add(kiq); menu1.add(lista1); menu1.add(beszur1); menu1.addseparator(); menu1.add(menuker); menu1.addseparator(); menu1.add(torol1); menu1.add(kilep);

Példakód JMenu menu2 = new JMenu("Beállítások"); menu2.setmnemonic(keyevent.vk_2); jcbm = new JCheckBoxMenuItem("Magyarázatok"); jcbm.setstate(true); jcbm.setmnemonic(keyevent.vk_g); jcbm.addactionlistener(this); menu2.add(jcbm); menu3 = new JMenu("Egyéb"); menu3.setmnemonic(keyevent.vk_3); menusor = new JMenuBar(); this.setjmenubar(menusor); menusor.add(menu1); menusor.add(menu2); menusor.add(menu3); 90/66

Példakód JMenu public void actionperformed(actionevent e) { if (jcbm.isselected()) {szoveg.settext("beállítás: Magyarázatokkal"); else {szoveg.settext("beállítás: Magyarázatok nélkül"); if(e.getsource().equals(kilep)) {this.dispose(); System.exit(0); if(e.getsource().equals(lista1)) {szoveg.settext("adatok - Listázás"); if(e.getsource().equals(beszur1)) {szoveg.settext("adatok - Beszúrás"); if(e.getsource().equals(torol1)) {szoveg.settext("adatok - Törlés"); if(e.getsource().equals(kaz)) {szoveg.settext("keresés - Azonosítóra"); if(e.getsource().equals(knev)) {szoveg.settext("keresés - Névre"); if(e.getsource().equals(kiq)) {szoveg.settext("keresés - IQ-ra"); public static void main(string[] args) { MN frame = new MN(); frame.setdefaultcloseoperation(jframe.dispose_on_close); frame.setvisible(true); 90/67

JMenu Vannak főmenük, és almenük. A főmenük egy menüsorban helyezkednek el. Az elemek megjelenítése, kiválasztása automatikus, csak a hozzájuk tartozó akciókat kell megadni. JMenu(név) - Főmenü. Megjelenik a menüsorban. JMenuItem(név) - Almenü. Főmenühöz tartozik. Akcióvezérlő szükséges a működéséhez. JMenuBar - Menüsor. Főmenüket lehet hozzáadni. A menücsoport olyan főmenü, amely egy másik főmenühöz van almenüként hozzárendelve. Főmenüszerűen jön létre, de almenüként funkcionál. Jelen esetben létrehozzuk a Keresés főmenüt, hozzáadunk három almenüt, végül a Keresés menüt hozzáadjuk a menu1 főmenühöz. Semmi extra parancs, csak egy kis logikai játék. Ha szeretnénk a Keresést elkülöníteni a menu1 többi almenüjétől, rakjunk alá és fölé szeparátort: menu1.addseparator(); 90/68

JMenu Az állapotmenü ki- vagy bekapcsolt értékét egy picike jelölőnégyzet jelzi. JCheckBoxMenuItem - Állapotmenü. Értéke true vagy false lehet. setstate(true vagy false); - Állapotmenü alapértékének beállítása. Az állapotmenü értékváltozását az isselected() metósussal kezelhetjük le. Gyorsbillentyűk: Hasznosak, főleg ha nincs egér - a spájzban :-). setmnemonic(bill.kód) - Gyorsbillentyű hozzáadása menühöz. Bármilyenhez. KeyEvent.VK_H - Billentyűleütés, jelen esetben az ALT+H billentyűé. A spéci billentyűkhöz spéci kódok tartoznak, nézz utána a helpben. Menükhöz célszerűbb egy közös eseménykezelőt írni, és itt beállítani minden almenü akcióját. 90/69

Teszt 1. Melyik eszközkészletre alapoz a swing GUI programozás? GUI toolkit Abstract Windowing Toolkit Graphics Event Toolkit Java Enhancement Toolkit Operating System GUI toolkit 90/70

Teszt 2. Jelölje meg az összes igaz állítást a swing csomaggal kapcsolatban! A legelső verziótól a Java része A host oldali C kódot hívja meg a kirajzoláshoz Lassú a garafika megjelenítése Támogatja az animációt és a 3D grafikát Egységes megjelenítési felületet biztosít A Java SE 8-ban jelent meg Az eseménykezelésben épít az előző verzióra Minden objektumának neve J betűvel kezdődik 90/71

Teszt 3. A GUI programozás három fő eleme a következő: Windows, Buttons, Mice GUI Components, Graphics, Code GUI Components, Event Listeners, Application Code Frames, Code, Events Window, GUI Components, Events 90/72

Teszt 4. Mi a neve annak a konténer komponensnek, amiben megjelennek a grafikus elemek? Window Screen JPanel JFrame JContainer 90/73

Teszt 5. Egészítse ki a kódot úgy, hogy megjelenjen a program ablaka! public class microgui { public static void main (String[] args){ JFrame frm = new (); frm. ( 150, 100 ); frm. ( true ); Frame, setsize, setvisibleon JFrame, setsize, setvisible JFrame, setbounds, dispose Form, setbounds, setvisible 90/74

Teszt 6. Melyik az a komponens, amelyik meghatározza, hogy hogyan jelennek meg a konténer összetevői? Display Manager Component Manager Stage Manager Layout Manager Visible Manager 90/75

Teszt 7. Az alábbi tartalom elrendezők közül melyik jeleníti meg az egyes elemeket sorban, egymás után, a hozzáadás sorrendjében? CardLayout FlowLayout GridLayout BorderLayout OrderLayout 90/76

Teszt 8. Melyik interfészt kötelező implementálni ahhoz, hogy egy nyomógomb eseményt le tudjon a program kezelni? ButtonCustomer Runnable ButtonListener ActionManager ActionListener ActionPerformed 90/77

Teszt 9. Melyik metódust kell implementálni ahhoz, hogy egy nyomógomb eseménykezelője működőképes legyen? buttonperformed() actionperformed() buttonlistener() actionhandler() actionlistener() buttonhandler() 90/78

Teszt 10. Egészítse ki a kódot úgy, hogy működőképes legyen! public TextExample() { text = new JTextField( ) ; ( new FlowLayout() ); add( ); text, setlayout, 20 20, setlayout, text 20, put, frame 20, set, text 90/79

Teszt 11. Melyik metódussal lehet kiolvasni egy JTextField tartalmát? readtext() gettext() getstring() getdata() readstring() 90/80

Teszt 12. Hogyan lehet megakadályozni, hogy egy JTextField mezőbe a felhasználó adatot írhasson? seteditable(false) seteditable(true) setnoeditable() setreadableonly() setreadable(true) 90/81

Teszt 13. Melyik egy JPanel alapértelmezett tartalom elrendezője? PanelLayout FrameLayout FlowLayout BoxLayout GridLayout 90/82

Teszt 14. Melyik kóddal lehet kikapcsolni egy JPanel tartalom elrendezőjét? jp.setlayout(null); jp.getcontentpane(null); jp.setlayoutmanager(false); jp.setlayout(false); jp.getcontentpane(layout(null)); 90/83

Teszt 15. Melyik grafikus elem látható az ábrán? JComboBox JCheckList JCheckBox JSpinner JRollingMenuItem 90/84

Teszt 16. Melyik metódussal lehet vizsgálni egy JCheckBox kiválasztott állapotát? getselected() isselected() selected() getvalue() Egyik felsorolt metódussal sem 90/85

Teszt 17. Melyik JFrame konstans jelzi, hogy a programnak le kell állnia, amikor az ablakot bezárja a felhasználó? TERMINATE_ON_CLOSE IMMEDIATELY_CLOSE EXIT_ON_CLOSE DISPOSE_WHEN_CLOSE Egyik felsorolt konstans sem 90/86

Teszt 18. Melyik egy JFrame alapértelmezett tartalom elrendezője? Nincs alapértelmezett tartalom elrendezője FrameLayout FlowLayout BorderLayout GridLayout 90/87

Teszt 19. Melyik elem biztosítja egy ablak alapértelmezett jellemzőit, a címsávot, és az átméretező gombokat? JWindow JFrame JSwing JWindowControl JPanel 90/88

Felhasznált irodalom Ficsor Lajos elektronikus jegyzetei Elek Tibor elektronikus jegyzetei www.tutorialspoint.com/java oldal anyagai prog.hu oldal anyagai 90/89

VÉGE VÉGE 90/90