92
2015/10/31 01:12 1/92 Java GUI Swing csomaggal SzitWiki - http://szit.hu/ < Java Java GUI Swing csomaggal Szerző: Sallai András Copyright © Sallai András, 2011, 2012, 2013, 2014, 2015 Licenc: GNU Free Documentation License 1.3 Web: http://szit.hu Bevezetés Ennek a fejezetnek a megvalósításához feltételezem a Java alapismereteket és a Java objektumorientált programozási ismereteket. Joggal kérdezhetjük, hogy miért van még egy grafikus eszközkészlet a Java nyelvben. Ott van az „awt” minek még a Swing is? Az awt programozói eszközkészlet úgy működik, hogy az ablakok a komponensek megjelenítését az operációs rendszer ablakkezelőjére bízza, minden operációs rendszeren. Ennek eredménye, hogy ugyanaz a program másként néz ki Windowson, Linuxon, MacOSX-en vagy más rendszeren. A Swing eszközkészletet úgy alakították ki, hogy maga határozza meg hogyan nézzen ki a program ablaka. Így egységes kinézetet kapunk minden operációs rendszeren. Ablak Első program A Java alapismeretek alapján, az első programunk, amely egy ablakot jelenít meg az alábbiak szerint nézhet ki. Program.java import javax.swing.JFrame; class Program { public static void main(String args[]) { JFrame ablak = new JFrame(); ablak.setSize(400, 300); ablak.setVisible(true); } }

Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

Embed Size (px)

Citation preview

Page 1: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

2015/10/31 01:12 1/92 Java GUI Swing csomaggal

SzitWiki - http://szit.hu/

< Java

Java GUI Swing csomaggal

Szerző: Sallai AndrásCopyright © Sallai András, 2011, 2012, 2013, 2014, 2015Licenc: GNU Free Documentation License 1.3Web: http://szit.hu

Bevezetés

Ennek a fejezetnek a megvalósításához feltételezem a Java alapismereteket és a Javaobjektumorientált programozási ismereteket.

Joggal kérdezhetjük, hogy miért van még egy grafikus eszközkészlet a Java nyelvben. Ott van az„awt” minek még a Swing is?

Az awt programozói eszközkészlet úgy működik, hogy az ablakok a komponensek megjelenítését azoperációs rendszer ablakkezelőjére bízza, minden operációs rendszeren. Ennek eredménye, hogyugyanaz a program másként néz ki Windowson, Linuxon, MacOSX-en vagy más rendszeren. A Swingeszközkészletet úgy alakították ki, hogy maga határozza meg hogyan nézzen ki a program ablaka. Ígyegységes kinézetet kapunk minden operációs rendszeren.

Ablak

Első program

A Java alapismeretek alapján, az első programunk, amely egy ablakot jelenít meg az alábbiak szerintnézhet ki.

Program.java

import javax.swing.JFrame; class Program{ public static void main(String args[]) { JFrame ablak = new JFrame(); ablak.setSize(400, 300); ablak.setVisible(true); }}

Page 2: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

Last update:2015/10/29 19:41 oktatas:programozás:java:java_gui_swing http://szit.hu/doku.php?id=oktatas:programoz%C3%A1s:java:java_gui_swing

http://szit.hu/ Printed on 2015/10/31 01:12

A fenti program egy szimpla ablakot valósít meg, amelynek a mérete 400×300-as.

Az első program elemzése

Az ablak létrehozásához JFrame osztályt használjuk, így programban importáljuk azt, amely egyablakot valósít meg:

import javax.swing.JFrame;

A programban egy ablak nevű objektumot deklarálunk:

JFrame ablak

és rögtön helyet is foglalunk számára:

new JFrame();

A következő utasítás beállítja az ablak méretét:

ablak.setSize(400, 300);

A következő utasítás megjeleníti az ablakot. Ennek az utasításnak az utolsónak kell lenni.

ablak.setVisible(true);

A programunk magját tulajdonképpen a main() metódusban hoztuk létre, hagyományos módon:

JFrame ablak = new JFrame();ablak.setSize(400, 300);ablak.setVisible(true);

Második program

A második programunk eredménye mindenben megegyezik az előzővel, viszont másként valósítottukmeg. Kihasználjuk a Java objektum orientált tulajdonságait, és a megvalósításhoz az öröklésthasználjuk.

Program.java

import javax.swing.JFrame; class Program extends JFrame{ Program() { setSize(400, 300); setVisible(true);

Page 3: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

2015/10/31 01:12 3/92 Java GUI Swing csomaggal

SzitWiki - http://szit.hu/

} public static void main(String args[]) { new Program(); }}

Ugyanez NetBeans rendszerben:

Program.java

/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package program;import javax.swing.JFrame; /** * * @author andras */public class Program extends JFrame{ /** * @param args the command line arguments */ Program() { setSize(400, 300); setVisible(true); } public static void main(String[] args) { // TODO code application logic here new Program(); }}

A megjegyzéseket akár ki is törölhetjük.

Vegyük észre, hogy a megjegyzéseket nem tekintve a különbség csak az, hogy NetBeansforrásprogramjában van a forráskód elején egy package program; nevű sor.

A második program elemzése

Page 4: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

Last update:2015/10/29 19:41 oktatas:programozás:java:java_gui_swing http://szit.hu/doku.php?id=oktatas:programoz%C3%A1s:java:java_gui_swing

http://szit.hu/ Printed on 2015/10/31 01:12

Az első sor ugyanúgy importálja a JFrame osztályt mint az első programunk.

A főosztályunkban viszont most látunk egy „extends JFrame” kiegészítést. Az „extends” arra adutasítást, hogy a JFrame összes tulajdonságát és metódusát átörökítjük a Program osztályunkszámára. Ettől kezdve a Program osztály úgy viselkedik mint egy JFrame objektum. Aprogramosztályon futtatható az összes metódus amivel rendelkezik a JFrame osztály. Ilyen metódus apéldában szereplő setSize() és setVisible() metódus is.

Program(){ setSize(400, 300); setVisible(true);}

A Program osztályon belül létre kell hozni egy speciális metódust, a „konstruktort”! Az objektumorientált tanulmányaikból tudhatjuk, hogy ennek meg kell egyeznie az osztály nevével. A példábanennek megfelelően egy Program() nevű konstruktort hoztunk létre a main() metódus előtt.

Az ablakunk beállításit ebben a konstruktorban adom meg. Lásd

setSize(400, 300);setVisible(true);

Ahhoz, hogy a program elinduljon a main() metódusban meg kell hívnunk a konstruktorunkat:

new Program();

JLabel

Felirat

A következő programunk ablakára egy feliratot fogunk elhelyezni, amit a JLabel osztállyal valósítunkmeg.

Program.java

import javax.swing.JFrame;import javax.swing.JLabel;class Program extends JFrame{ JLabel felirat; Program() { felirat = new JLabel("Helló Világ!"); add(felirat); setSize(400, 300); setVisible(true); }

Page 5: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

2015/10/31 01:12 5/92 Java GUI Swing csomaggal

SzitWiki - http://szit.hu/

public static void main(String args[]) { new Program(); }}

Létrehoztunk egy felirat nevű objektumot a JLabel osztályból. Vegyük észre, hogy ezt a konstruktorelőtt deklaráltuk, de az objektumnak a helyfoglalást a konstruktoron belül valósítottuk meg.Ugyanakkor a konstruktornak paraméterként megadtuk a felírat szövegét, amely persze nemkötelező.

Az ablakhoz hozzáadtuk a felirat nevű objektumot:

add(felirat);

A program elején van két import kezdetű sor. Az első a JFrame osztályt importálja:

import javax.swing.JFrame;

A második a JLabel osztályt:

import javax.swing.JLabel

A felírat bármikor újraírható:

label1.setText("Másik felirat");

Ha a JLabel komponens háttérszínét szeretnénk változtatni, akkor előtte szükséges a setOpaque():

label1.setOpaque(true);label1.setBackground(Color.blue);label1.setForeground(Color.WHITE);

import javax.swing.SwingConstants;...//RIGHT, LEFT, CENTERlabel1.setHorizontalAlignment(SwingConstants.CENTER);//TOP, BOTTOM, CENTERlabel1.setVerticalAlignment(SwingConstants.TOP);

Ablak automatikus méretezése

Program.java

import javax.swing.JFrame;import javax.swing.JLabel;class Program extends JFrame{

Page 6: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

Last update:2015/10/29 19:41 oktatas:programozás:java:java_gui_swing http://szit.hu/doku.php?id=oktatas:programoz%C3%A1s:java:java_gui_swing

http://szit.hu/ Printed on 2015/10/31 01:12

JLabel felirat; Program() { felirat = new JLabel("Helló Világ!"); add(felirat); pack(); setVisible(true); } public static void main(String args[]) { new Program(); }}

Vegyük észre a pack() utasítást a konstruktorban. Ugyanakkor kivettük a setSize() metódust. A pack()metódus a komponens méretéhez igazítja az ablakméretét.

Komponensek elhelyezése

Az ablak egyes komponenseit elhelyezhetjük koordináták megadásával is. Ha így dolgozunk, be kellállítani a komponens szélességét és magasságát is. Ez megtehetjük a setBounds() metódussal. Azelrendezéskezelést azonban ki kell kapcsolni a setLayout() metódussal.

Program.java

import javax.swing.JFrame;import javax.swing.JLabel;class Program extends JFrame{ JLabel felirat; Program() { felirat = new JLabel("Helló Világ!"); felirat.setBounds(50, 50, 100, 30); setLayout(null); add(felirat); setSize(400, 300); setVisible(true); } public static void main(String args[]) { new Program(); }}

Vegyük észre a setLayout() utasítást a konstruktorban. Ugyanakkor vissza tettük a setSize()metódust.

Page 7: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

2015/10/31 01:12 7/92 Java GUI Swing csomaggal

SzitWiki - http://szit.hu/

Ablakbezárás esemény kezelése

DefaultCloseOperation()

A grafikus programok eseményvezéreltek. A program folyamatosan fut, és eseményekbekövetkezését várja. Ilyen események az egérkattintás és a billentyűzetnyomás, egy komponensvalamely tulajdonságának megváltozása, stb. Egy normál alkalmazás ablak címsorában van egybezárás gomb „X”, egy minimalizálás és egy maximalizálás gomb. A bezárás gombra kattintvakiváltódik az úgynevezett „Close” esemény.

Biztosan észrevettük, hogy ablakunk eddig nem záródott be, amikor az „X”-re kattintottuk. Az „X”alatt értve az ablak címsorában a bezárásikont. A következő programban egy alapértelmezett kezelőtadunk az ablakhoz, amely megvalósítja a program befejezését, ha erre az ikonra kattint a felhasználó.

Program.java

import javax.swing.JFrame;import javax.swing.JLabel;class Program extends JFrame{ JLabel felirat; Program() { felirat = new JLabel("Helló Világ!"); add(felirat); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); pack(); setVisible(true); } public static void main(String args[]) { new Program(); }}

Az újabb sor amit hozzáadtunk a programunkhoz:

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Az EXIT_ON_CLOSE a JFrame osztály egy mezője, amely valójában egy számállandó. Ha ezt aszámállandót adjuk meg a setDefaultClsoeOperation() metódus paramétereként, akkor a programkilép a „Close” esemény bekövetkezésekor.

Ablakbezárás esemény

Alapértelmezetten amikor a felhasználó bezárja az ablakot, az ablak elrejtésre kerül.

Page 8: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

Last update:2015/10/29 19:41 oktatas:programozás:java:java_gui_swing http://szit.hu/doku.php?id=oktatas:programoz%C3%A1s:java:java_gui_swing

http://szit.hu/ Printed on 2015/10/31 01:12

A setDefaultCloseOperation argumentumaként más értékeket is beállíthatunk.

ablak.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Négy érték állítható be JFrame, JInternalPane és JDialog esetén:

DO_NOTHING_ON_CLOSENem csinál semmit ablak bezárásra kattintva. A WindowsListener segítségével máshatásokat is beállíthatsz.

HIDE_ON_CLOSE (az alapértelmezett beállítás JDialog és JFrame esetén)Az ablak elrejtése.

DISPOSE_ON_CLOSE (az alapértelmezett JInternalFrame esetén)Elrejti és megszünteti az ablakot.

EXIT_ON_CLOSE (A JFrame osztályban van definiálva)Kilép az alkalmazásból, a System.exit(0) hívással. Alkalmazások esetén csak ez ajánlott.

Az ablak helyének megadása

A következő programban azt szemléltetjük, hogyan határozzuk meg az ablak helyét saját magunk.Ehhez a setLocation() metódust használhatjuk:

Program.java

import javax.swing.JFrame;import javax.swing.JLabel;class Program extends JFrame{ JLabel felirat; Program() { felirat = new JLabel("Helló Világ!"); add(felirat); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); pack(); setLocation(200, 200); setVisible(true); } public static void main(String args[]) { new Program(); }}

A setLocation() metódusnak két paramétere van. A két száma az ablak helyéenk x és y koordinátája aképernyőn.

Page 9: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

2015/10/31 01:12 9/92 Java GUI Swing csomaggal

SzitWiki - http://szit.hu/

Ablak középre igazítása

Ez az ablak bal felső sarkát teszi középre:

ablak.setLocationRelativeTo(null);

Ezért írjunk hozzá egy metódust:

public static void centerWindow(java.awt.Window frame) { java.awt.Dimension dimension =java.awt.Toolkit.getDefaultToolkit().getScreenSize(); int x = (int) ((dimension.getWidth() - frame.getWidth()) / 2); int y = (int) ((dimension.getHeight() - frame.getHeight()) / 2); frame.setLocation(x, y);}

Program.java

import java.awt.*;import javax.swing.*; class Program5{ JFrame ablak; JLabel cimke1; JLabel cimke2; public static void main(String args[]) { new Program5(); } Program5() { ablak = new JFrame("Címke"); cimke1 = new JLabel("Első címke"); cimke2 = new JLabel("Második címke"); cimke1.setBounds(10, 10, 100, 30); cimke2.setBounds(10, 40, 100, 30); //ablak.setBounds(10, 40, 800, 600); ablak.setSize(800, 600); centerWindow(ablak); ablak.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); ablak.setLayout(null);

Page 10: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

Last update:2015/10/29 19:41 oktatas:programozás:java:java_gui_swing http://szit.hu/doku.php?id=oktatas:programoz%C3%A1s:java:java_gui_swing

http://szit.hu/ Printed on 2015/10/31 01:12

ablak.add(cimke1); ablak.add(cimke2); ablak.setVisible(true); } public static void centerWindow(Window frame) { Dimension dimension =Toolkit.getDefaultToolkit().getScreenSize(); int x = (int) ((dimension.getWidth() - frame.getWidth()) / 2); int y = (int) ((dimension.getHeight() - frame.getHeight()) /2); frame.setLocation(x, y); }}

Másik módszer:

public void setCenter(javax.swing.JFrame window) { java.awt.Point center =java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment().getCenterPoint(); int x =(int) center.getX() - (this.getWidth()/2); int y =(int) center.getY() - (this.getHeight()/2); java.awt.Point windowCenter = new java.awt.Point(x, y); window.setLocation(windowCenter);}

Középre igazítás külön metódusban:

Program.java

import javax.swing.JFrame;import javax.swing.JLabel;import java.awt.FlowLayout;import java.awt.GraphicsEnvironment;import java.awt.Point;class Program extends JFrame{ JLabel felirat1; JLabel felirat2; Program() { felirat1 = new JLabel("Első címke"); felirat2 = new JLabel("Második címke"); add(felirat1); add(felirat2);

Page 11: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

2015/10/31 01:12 11/92 Java GUI Swing csomaggal

SzitWiki - http://szit.hu/

setLayout(new FlowLayout()); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(300, 200); setCenter(this); //Fontos, hogy a méretezés után hívjuk meg setVisible(true); } void setCenter(JFrame ablak) { Point center =GraphicsEnvironment.getLocalGraphicsEnvironment().getCenterPoint(); int x =(int) center.getX() - (ablak.getWidth()/2); int y =(int) center.getY() - (ablak.getHeight()/2); Point ablakCenter = new Point(x, y); ablak.setLocation(ablakCenter); } public static void main(String args[]) { new Program(); }}

Méretezés, hely

A méretezés és helymeghatározásra a setBounds() metódust használhatjuk. Általánosságban asetBounds() paraméterezése:

setBounds(x, y, szelesseg, magassag);

Az x és y koordináta határozza meg, hogy az ablak, vagy egy komponens hova kerüljön. Az xkoordináta az ablak vízszintes helyzetét határozza meg a képernyőn, annak baloldalához képest. Az ykoordináta az ablak függőleges helyzetét határozza meg a képernyőn, annak tetejétől. A „szelesseg”és a „magassag” önmagáért beszél.

Egy objektum helyének meghatározása:

setLocation(50, 50);

Egy objektum mérete:

setSize(400, 300);

Az objektum helye és mérete egyszerre:

setBounds(50, 50, 400, 300);

Az ablak átméretezésének tiltása:

Page 12: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

Last update:2015/10/29 19:41 oktatas:programozás:java:java_gui_swing http://szit.hu/doku.php?id=oktatas:programoz%C3%A1s:java:java_gui_swing

http://szit.hu/ Printed on 2015/10/31 01:12

setResizable(false);

Az ablak és a komponensek méretét el is tárolhatjuk a Dimension osztály segítségével:

import java.awt.Dimension;

Használata a következő módon lehetséges:

Dimension meret = new Dimension(400, 300);setSize(meret);

Dimension meret = new Dimension();meret.width = 400;meret.height = 300;setSize(meret);

A helyeket is eltárolhatjuk a java.awt.Point osztály segítségével:

Point hely = new Point();hely.x = 50;hely.y = 50;setLocation(hely);

A hely és a méret egyszerre is eltárolható a java.awt.Rectangle osztály segítségével:

Rectangle teglalap = new Rectangle();teglalap.x = 50;teglalap.y = 50;teglalap.width = 400;teglalap.height = 300;setBounds(teglalap);setVisible(true);

Több komponens

Itt az ideje, hogy több komponenst is hozzáadjunk az ablakunkhoz. A komponens kettő darab címke.Az egyik cimke1 és a cimke2. A szokásos módon mind a kettőt létrehozzuk és helyet foglalunkszámára. Ha fenti kódhoz hozzáillesztünk egy újabb címkét, azt tapasztaljuk, hogy egyik címke rálóg amásikra. Szükség van egy utasításra, amely megmondja, hogy egymás után kell azt megjeleníteni.Ehhez a java.awt.FlowLayout osztályt használhatjuk.

Program.java

import javax.swing.JFrame;import javax.swing.JLabel;import java.awt.FlowLayout;class Program extends JFrame{

Page 13: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

2015/10/31 01:12 13/92 Java GUI Swing csomaggal

SzitWiki - http://szit.hu/

JLabel felirat1; JLabel felirat2; Program() { felirat1 = new JLabel("Első címke"); felirat2 = new JLabel("Második címke"); add(felirat1); add(felirat2); setLayout(new FlowLayout()); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); pack(); setLocation(200, 200); setVisible(true); } public static void main(String args[]) { new Program(); }}

A FlowLayout() konstruktorral megmondjuk, hogy a komponenseket egymás után sorba helyezzük el.Ha ezt kihagyjuk, akkor egymásra rakja a komponenseket. Ez viszont az awt csomagban van, ezértimportáljuk azt:

import java.awt.*;

Itt szeretném megjegyezni, hogy ha az awt csomagból csak a FlowLayout osztályt használjuk, akkoraz importálásnál megadhatjuk, hogy csak ezt az osztályt importálom:

import java.awt.FlowLayout;

Abszolút pozíciónálás

A következő programunkban nem használunk elrendezéskezelőt (ablak.setLayout(…)). Akomponensek helyét az ablakon mi magunk fogjuk meghatározni. Ehhez az elrendezéskezelőparamétereként „null” érték kerül átadásra. Így szükségtelen a java.awt.FlowLayout osztályimportálása is.

import javax.swing.JFrame;import javax.swing.JLabel; class Program extends JFrame{ JLabel felirat1; JLabel felirat2; Program() {

Page 14: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

Last update:2015/10/29 19:41 oktatas:programozás:java:java_gui_swing http://szit.hu/doku.php?id=oktatas:programoz%C3%A1s:java:java_gui_swing

http://szit.hu/ Printed on 2015/10/31 01:12

felirat1 = new JLabel("Első címke"); felirat2 = new JLabel("Második címke"); felirat1.setBounds(50,50, 100, 30); felirat2.setBounds(50,100, 100, 30); setLayout(null); add(felirat1); add(felirat2); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(400,300); setVisible(true); } public static void main(String args[]) { new Program(); }}

Vegyük észre, hogy az ablak.setLayout() paramétere most már null:

ablak.setLayout(null);

A komponenseknél meghatározzuk a setBounds() metódussal a helyüket és méretüket.

cimke1.setBounds(50,50, 100, 100);cimke2.setBounds(50,100, 100, 100);

Gomb (JButton)

Alapértelmezett magasság: 25 pont

Program01.java

JButton gomb = new JButton("Klikkelj ide");gomb.setText("Más felirat");gomb.addActionListener(new Gomb_Click());

A java.awt.Insets osztály használható az JButton, JTextField és a JTextArea esetén is.

Belső margó:

nextButton.setMargin(new Insets(10, 10, 10, 10));

Page 15: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

2015/10/31 01:12 15/92 Java GUI Swing csomaggal

SzitWiki - http://szit.hu/

Eseménykezelés

ActionPerformed

Az események kezeléséhez ActionListener interfészt használjuk. Az interfész olyan mint az osztály, dea hozzátartozó metódusoknak csak a fejrésze van deklarálva. A metódust törzs részét nekünk kelldefiniálni. Sőt ezt kötelező megtenni.

Az ActionListener interfész arra való, hogy az ablakon különböző eseményeket figyeljünk. AzActionListener interfészt úgy használhatjuk ha az „implements” utasítással utalunk rá. Ezt az osztályneve után írjuk az alábbi formában.

Az actionPerformed() metódus egy ilyen figyelő, amely események bekövetkezését figyeli. AzactionPerformed() metódust tehát nekünk kötelező definiálni. Van egy kötelező paramétere,amelynek kötelezően ActionEvent típus. Az így megadott változóban megvizsgálhatjuk, hogy melyikkomponens váltotta ki az eseményt.

Program.java

import javax.swing.JFrame;import javax.swing.JButton;import java.awt.event.ActionListener;import java.awt.event.ActionEvent; class Program extends JFrame implements ActionListener{ JButton kilepesgomb; Program() { kilepesgomb = new JButton("Kilépés"); kilepesgomb.setBounds(100, 100, 100, 30); kilepesgomb.addActionListener(this); add(kilepesgomb); setLayout(null); setSize(400, 300); setVisible(true); } public void actionPerformed(ActionEvent e) { System.exit(); } public static void main(String args[]) { new Program(); }}

Page 16: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

Last update:2015/10/29 19:41 oktatas:programozás:java:java_gui_swing http://szit.hu/doku.php?id=oktatas:programoz%C3%A1s:java:java_gui_swing

http://szit.hu/ Printed on 2015/10/31 01:12

A fenti programunkban a gomb1 nyomógombhoz rendelünk egy figyelőt:

gomb1.addActionListener(this);

Az actionPerformed metódus reagál az eseményre:

public void actionPerformed(ActionEvent e){ System.exit();}

Jelenleg csak egyetlen komponenshez rendeltünk eseményfigyelőt, így nem használtuk fel az „e”változót sem, vegyük észre.

Több komponens

Program.java

import javax.swing.JFrame;import javax.swing.JButton;import java.awt.event.ActionListener;import java.awt.event.ActionEvent; class Program extends JFrame implements ActionListener{ JButton kilepesgomb; JButton valtoztatgomb; JButton visszagomb; Program() { kilepesgomb = new JButton("Kilépés"); valtoztatgomb = new JButton("Változtat"); visszagomb = new JButton("Vissza"); kilepesgomb.setBounds(10, 100, 100, 30); kilepesgomb.addActionListener(this); valtoztatgomb.setBounds(120, 100, 100, 30); valtoztatgomb.addActionListener(this); visszagomb.setBounds(230, 100, 100, 30); visszagomb.addActionListener(this); setLayout(null); add(kilepesgomb); add(valtoztatgomb); add(visszagomb); setSize(400, 300); setVisible(true);

Page 17: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

2015/10/31 01:12 17/92 Java GUI Swing csomaggal

SzitWiki - http://szit.hu/

} public void actionPerformed(ActionEvent e) { if(e.getSource() == kilepesgomb) System.exit(); if(e.getSource() == valtoztatgomb) setTitle("Működik"); if(e.getSource() == visszagomb) setTitle("Másik"); } public static void main(String args[]) { new Program(); }}

Eseménykezelő névtelen osztállyal

import javax.swing.JFrame;import javax.swing.JButton;import java.awt.event.ActionListener;import java.awt.event.ActionEvent; class Program extends JFrame{ JButton kilepesgomb; Program() { kilepesgomb = new JButton("Kilépés"); kilepesgomb.setBounds(50,100, 100, 30); kilepesgomb.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.exit(); } }); setLayout(null); add(kilepesgomb); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(400,300); setVisible(true); } public static void main(String args[]) {

Page 18: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

Last update:2015/10/29 19:41 oktatas:programozás:java:java_gui_swing http://szit.hu/doku.php?id=oktatas:programoz%C3%A1s:java:java_gui_swing

http://szit.hu/ Printed on 2015/10/31 01:12

new Program(); }}

A fenti példában az eseménykezelést névtelen beépített osztállyal valósítjuk meg.

Ezt a megoldást is gyakran használják.

Eseménykezelő beépített osztállyal

Ebben a példában beépített (nested) osztállyal valósítjuk meg az eseménykezelést.

Program.java

import javax.swing.JFrame;import javax.swing.JButton;import java.awt.event.ActionListener;import java.awt.event.ActionEvent; class Program extends JFrame{ JButton kilepesgomb; Program() { kilepesgomb = new JButton("Kilépés"); kilepesgomb.setBounds(50,100, 100, 30); kilepesgomb.addActionListener(new KilepesGomb_Click()); setLayout(null); add(kilepesgomb); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(400,300); setVisible(true); } class KilepesGomb_Click implements ActionListener { public void actionPerformed(ActionEvent e) { System.exit(); } } public static void main(String args[]) { new Program(); }}

Page 19: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

2015/10/31 01:12 19/92 Java GUI Swing csomaggal

SzitWiki - http://szit.hu/

ExitListener

import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent; public class ExitListener extends WindowAdapter{ public void windowClosing(WindowEvent event) { System.exit(); }}

Szövegdoboz használata

Szövegdobozt a JTextField osztállyal hozhatunk létre. A szöveg doboznak kezdőértéket adhatunk akonstruktorban a Text tulajdonsággal. Például:

TextField1.Text = "Kezdő szöveg";

Később a doboz tartalmát a setText() metódussal állítjuk:

TextField1.setText("Új szöveg");

A doboz tartalmának lekérdezése:

String tartalom = TextField.getText();

A következő példában egy számot várunk, amit megduplázunk.

Program.java

import java.awt.FlowLayout;import java.awt.event.ActionListener;import java.awt.event.ActionEvent;import javax.swing.JFrame;import javax.swing.JButton;import javax.swing.JTextField; class Program extends JFrame{ JButton kilepesgomb; JButton duplazasgomb; JTextField szammezo; Program() { kilepesgomb = new JButton("Kilépés");

Page 20: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

Last update:2015/10/29 19:41 oktatas:programozás:java:java_gui_swing http://szit.hu/doku.php?id=oktatas:programoz%C3%A1s:java:java_gui_swing

http://szit.hu/ Printed on 2015/10/31 01:12

duplazasgomb = new JButton("Dupláz"); szammezo = new JTextField(); kilepesgomb.addActionListener(new KilepesGomb_Click()); duplazasgomb.addActionListener(new DuplazoGomb_Click()); szammezo.setColumns(7); add(kilepesgomb); add(duplazasgomb); add(szammezo); setLayout(new FlowLayout()); pack(); setVisible(true); } class KilepesGomb_Click implements ActionListener { public void actionPerformed(ActionEvent e) { System.exit(); } } class DuplazoGomb_Click implements ActionListener { public void actionPerformed(ActionEvent e) { String szamstr = szammezo.getText(); int szam = Integer.parseInt(szamstr); int eredmeny = szam * 2; szammezo.setText(Integer.toString(eredmeny)); } } public static void main(String args[]) { new Program(); }}

Alapértelmezett magasság: 19 pont.

setHorizontalAlignment(JTextField.CENTER);

JTextField beállítások

textField1.setEditable(false);

textField1.setHorizontalAlignment(JTextField.LEFT);

JTextField.LEFT

Page 21: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

2015/10/31 01:12 21/92 Java GUI Swing csomaggal

SzitWiki - http://szit.hu/

JTextField.CENTERJTextField.RIGHTJTextField.LEADING (vezetés, vagyis balra)JTextField.TRAILING (követeés, vagyis jobbra)

Listadoboz

Egyszerű listadoboz

Listadobozhoz két osztály szükséges:

DefaultListModelJList

Az első egy könnyen kezelhető listáról gondoskodik a másik pedig a megjelenítésről.

Program01.java

import javax.swing.JFrame;import javax.swing.JList;import javax.swing.DefaultListModel;import javax.swing.JScrollPane;import java.awt.FlowLayout;import java.awt.Dimension; class Program01 extends JFrame{ final static long serialVersionUID = 1; DefaultListModel<String> listModel = newDefaultListModel<String>(); JList<String> jlist1 = new JList<String>(listModel); JScrollPane scrollPane1 = new JScrollPane(jlist1); Program01() { scrollPane1.setPreferredSize(new Dimension(100, 200)); listModel.addElement("Első"); listModel.addElement("Második"); listModel.addElement("Harmadik"); listModel.addElement("Negyedik"); add(scrollPane1); setLayout(new FlowLayout()); pack(); setVisible(true); } public static void main(String args[]) { new Program01();

Page 22: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

Last update:2015/10/29 19:41 oktatas:programozás:java:java_gui_swing http://szit.hu/doku.php?id=oktatas:programoz%C3%A1s:java:java_gui_swing

http://szit.hu/ Printed on 2015/10/31 01:12

}}

Ha kihagyjuk a ScrollPane osztályt, akkor listánk összeugrik.

Elem törlése:

model.remove(2);

A példában a harmadik elemet töröljük.

Elemek törlése:

model.clear();

Adott elem cseréje:

model.set(1, "gggg");

A második elem cseréje „gggg” karaktersorozatra.

A kiválasztott:

jlist1.getSelectedIndex()

Az 50-dik elemet szeretném:

String str = listModel.getElementAt(50);

Egy elem átírása:

void setElementAt(Object obj, int index)

Van kijelölt?:

isSelectionEmpty()

A különbség csupán a <String> részek a két sorban:

DefaultListModel<String> listModel = new DefaultListModel<String>();JList<String> jlist1 = new JList<String>(listModel);

Listadoboz másként

String[] lista = {"első", "második", "harmadik"};JList listabox = new Jlist(lista);

Page 23: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

2015/10/31 01:12 23/92 Java GUI Swing csomaggal

SzitWiki - http://szit.hu/

Teljes példa:

Program.java

import javax.swing.*; class Program extends JFrame{ JList listabox; Program() { setLayout(null); String[] lista = {"első", "második", "harmadik"}; listabox = new JList(lista); listabox.setBounds(100,100, 100,100); add(listabox); setSize(800,600); setVisible(true); } public static void main(String args[]) { new Program(); }}

Skrollozható kerettel:

Program.java

import javax.swing.*; class Program extends JFrame{ JList listabox; Program() { setLayout(null); String[] lista = {"első", "második", "harmadik", "negyedik","ötödik", "hatodik", "hetedik", "nyolcadik"}; listabox = new JList(lista); JScrollPane listaPane = new JScrollPane(listabox); listaPane.setBounds(100, 100, 100, 100); add(listaPane); setSize(800,600); setVisible(true); } public static void main(String args[]) {

Page 24: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

Last update:2015/10/29 19:41 oktatas:programozás:java:java_gui_swing http://szit.hu/doku.php?id=oktatas:programoz%C3%A1s:java:java_gui_swing

http://szit.hu/ Printed on 2015/10/31 01:12

new Program(); }}

Listamodel használata

Program.java

import javax.swing.*; class Program extends JFrame{ JList listabox; DefaultListModel listaModel; Program() { setLayout(null); listaModel = new DefaultListModel(); listaModel.addElement("Első"); listaModel.addElement("Második"); listaModel.addElement("Harmadik"); listaModel.addElement("Negyedik"); listaModel.addElement("Ötödik"); listaModel.addElement("Hatodik"); listaModel.addElement("Hetedik"); listaModel.addElement("Nyolcadik"); listabox = new JList(listaModel); JScrollPane listaPane = new JScrollPane(listabox); listaPane.setBounds(100, 100, 100, 100); add(listaPane); setSize(800,600); setVisible(true); } public static void main(String args[]) { new Program(); }}

Listamodel kezelése

Program.java

import javax.swing.*;

Page 25: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

2015/10/31 01:12 25/92 Java GUI Swing csomaggal

SzitWiki - http://szit.hu/

import java.awt.event.*; class Program extends JFrame{ JList listabox; DefaultListModel listaModel; JButton gomb; Program() { setLayout(null); listaModel = new DefaultListModel(); listaModel.addElement("Első"); listaModel.addElement("Második"); listabox = new JList(listaModel); JScrollPane listaPane = new JScrollPane(listabox); listaPane.setBounds(100, 100, 100, 100); gomb = new JButton("Hozzáad"); gomb.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { listaModel.addElement("Harmadik"); } }); gomb.setBounds(20, 20, 100, 30); add(listaPane); add(gomb); setSize(800,600); setVisible(true); } public static void main(String args[]) { new Program(); }}

A DefaultListModel osztály metódusai

void add(int index, Object element) Egy elem beszúrása egy adott helyre.void addElement(Object obj) A lista végéhez fűzünk egy elemet.int capacity() A lista kapacitása.void clear() A lista összes elemének törlése.boolean contains(Object elem) Az adott elem a listában van-e?void copyInto(Object[] anArray) Komponensek másolása a megadott tömbbe.

Page 26: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

Last update:2015/10/29 19:41 oktatas:programozás:java:java_gui_swing http://szit.hu/doku.php?id=oktatas:programoz%C3%A1s:java:java_gui_swing

http://szit.hu/ Printed on 2015/10/31 01:12

Object elementAt(int index) Az elem indexével tér vissza.

Enumeration<?> elements() A lista komponenseinek felsorolt típusával(Enumeration) tér vissza.

void ensureCapacity(int minCapacity)Növeljük a lista kapacitását, ha szükséges,hogytárolni tudjuk a megadott minimálist elemet.

Object firstElement() A lista első elemét kapjuk vissza.

Object get(int index) A lista adott pozícióban lévő elemét adjavissza.

Object getElementAt(int index) Visszatér az adott indexű elemmel.int getSize() Visszaadja a komponensek számát a listában.int indexOf(Object elem) Egy elem első előfordulását keresi.

int indexOf(Object elem, int index) Egy elem első előfordulását keresi, az adottindextől.

void insertElementAt(Object obj, intindex) Egy elem beszúrása a megadott indexhez.

boolean isEmpty() Megvizsgáljuk, hogy van-e elem a listának.Object lastElement() A lista utolsó elemét adja vissza.

int lastIndexOf(Object elem) Az elem utolsó előfordulásának indexét adjavissza.

int lastIndexOf(Object elem, int index) Az elem utolsó előfordulásának indexét adjavissza, az adott indextől keresve.

Object remove(int index) Adott elem törlése a listából, a megadottpozícióban.

void removeAllElements() Az összes elem törlése, a méret lenullázása.

boolean removeElement(Object obj) Törli az elemet az első előfordulásnál(legkisebb indexűt) a listából.

void removeElementAt(int index) Elem törlése a megadott indexnél.

void removeRange(int fromIndex, inttoIndex) Elemek törlése a megadott indextartományból.

Object set(int index, Object element) Adott pozícióban kicseréli egy elemet amegadott elemre.

void setElementAt(Object obj, int index) Adott indexű elemet beállítja a megadottelemre.

void setSize(int newSize) A lista méretének beállítása.int size() Visszaadja az elemek számát a listában.

Object[] toArray() Visszatér egy tömbbel, amely tartalmazza azösszes elemet, sorba rendezve.

String toString() Az objektum beállításainak megjelenítése,karaktersorozatként.

void trimToSize() A lista kapacitását beállítja a lista méretéhez.

Iterálás:

for(Object s : dictListModel.toArray()) writer.println((String)s);

Függőleges görgetés beállítása:

Page 27: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

2015/10/31 01:12 27/92 Java GUI Swing csomaggal

SzitWiki - http://szit.hu/

wordScrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);

Ez az elem legyen látható. ScrollPane esetén is működik:

wordList.ensureIndexIsVisible(index);

Kiválasztás figyelése. Egy esemény bekövetkezik az egér lenyomásakor és a felengedéskor is. AgetValueIsAdjusting() metódussal kiválasztható az első, vagy a második esemény:

topicsList.addListSelectionListener(new ListSelectionListener(){ public void valueChanged(ListSelectionEvent e) { if(e.getValueIsAdjusting()) { //Amit az egérlenyomásakor csinálunk } else { //Amit az egér felengedésekor csinálunk } }});

Párbeszédpanel

A JOptionPane osztály használatához importálni kell azt a javax.swing csomagból:

import javax.swing.JOptionPane;

Gyors kezdéshez:

javax.swing.JOptionPane.showMessageDialog(getContentPane(), "");

Üzenetablakok

Egy egyszerű párbeszédablak:

JOptionPane.showMessageDialog(null, edit.getText());

Az első paraméter vagy null vagy a szülőablak. Ha null értéket írtunk be, a felugró párbeszédablak aprogramablaktól függetlenül a képernyő közepén jelenik meg.

JOptionPane.showMessageDialog(ablak, edit.getText());

Ha megadjuk a szülőablakot, akkor a párbeszédpanel a programablakhoz igazodik.

Page 28: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

Last update:2015/10/29 19:41 oktatas:programozás:java:java_gui_swing http://szit.hu/doku.php?id=oktatas:programoz%C3%A1s:java:java_gui_swing

http://szit.hu/ Printed on 2015/10/31 01:12

A párbeszédpanel 5 féle lehet. Az alapértelmezett az „information”

kérdőinformációsfigyelmeztetőhibacsak szöveg

JOptionPane.showMessageDialog(szulo ,"Üzenet","Névjegy",JOptionPane.INFORMATION_MESSAGE );

Lehet egy ötödik paraméter is az ikon, ekkor információs párbeszédablaknak hozzuk létre.

JOptionPane.showMessageDialog(szulo ,"Üzenet","Névjegy",JOptionPane.INFORMATION_MESSAGE,ikon );

Információt kérő párbeszédablakok

int res = JOptionPane.showConfirmDialog(null,"Figyelem! Biztosan ezt akarod?","Figyelmeztetés",JOptionPane.YES_NO_OPTION); if (res == JOptionPane.YES_OPTION) System.out.println("Igen");else System.out.println("Nem");

Nyomógomb saját szöveggel

Object[] options = {"Igen, kérem", "Nem, köszönöm. "}; int n = JOptionPane.showOptionDialog(ablak, "Kéred ezt a lehetőséget?", "Általános kérdés", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, //nem használunk külön ikont options, //A gombok feliratai options[]); //Az alapértelmezett gomb felirata

Page 29: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

2015/10/31 01:12 29/92 Java GUI Swing csomaggal

SzitWiki - http://szit.hu/

Forrás

http://docs.oracle.com/javase/tutorial/uiswing/components/dialog.htmlhttp://docs.oracle.com/javase/6/docs/api/javax/swing/JOptionPane.html

Párbeszédablak átadott értékkel

Saját párbeszédablak készítése, átadott értékkel.

Program02.java

import javax.swing.JFrame;import javax.swing.JDialog;import javax.swing.JButton;import javax.swing.JLabel;import javax.swing.JTextField;import java.awt.FlowLayout;import java.awt.event.ActionListener;import java.awt.event.ActionEvent; class Program02 extends JFrame{ JButton gomb = new JButton("Bekér"); JTextField mezo = new JTextField(10); Program02() { gomb.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { Parbeszed p = new Parbeszed(); mezo.setText(p.showDialog()); } }); setLayout(new FlowLayout()); add(gomb); add(mezo); pack(); setVisible(true); } public static void main(String args[]) { new Program02(); }} class Parbeszed extends JDialog{

Page 30: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

Last update:2015/10/29 19:41 oktatas:programozás:java:java_gui_swing http://szit.hu/doku.php?id=oktatas:programoz%C3%A1s:java:java_gui_swing

http://szit.hu/ Printed on 2015/10/31 01:12

String nev; JTextField mezo = new JTextField(5); Parbeszed() { JButton gomb = new JButton("Ok"); gomb.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { nev = mezo.getText(); setVisible(false); } }); add(new JLabel("Név: ")); add(mezo); add(gomb); setLayout(new FlowLayout()); pack(); } public String showDialog() { setModal(true); setVisible(true); return nev; }}

Ikon

import javax.swing.*; class ap{ public static void main(String args[]) { JFrame ablak = new JFrame("Vmi"); ablak.setLayout(null); ablak.setIconImage(new ImageIcon("ikon.png").getImage()); ablak.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); ablak.setSize(400,300); ablak.setVisible(true); }}

Készíthetünk külön ikon változót, amit esetleg másra is használhatunk.

Page 31: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

2015/10/31 01:12 31/92 Java GUI Swing csomaggal

SzitWiki - http://szit.hu/

ImageIcon ikon = new ImageIcon("ikon.png"); ablak.setIconImage(ikon.getImage());

Esetleg így:

Program.java

import javax.swing.*;import java.awt.*;class Program extends JFrame{ Program() { setIconImage(new ImageIcon("kep.png").getImage()); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(300, 200); setVisible(true); } public static void main(String args[]) { new Program(); }}

A megvalósításhoz egy rögtönzött ikon:

http://szit.hu/download/oktatas/java/kep.png

Program01.java

import javax.swing.JFrame;import javax.swing.JButton;import javax.swing.ImageIcon;//~ import java.awt.Image;class Program01 extends JFrame{ JButton gomb = new JButton("Klikkelj ide"); Program01() { setIconImage(new ImageIcon("ikon.png").getImage()); //~ Image kep = newImageIcon("ikon.png").getImage().getScaledInstance(24, 24,java.awt.Image.SCALE_SMOOTH); gomb.setIcon(new ImageIcon("ikon.png")); add(gomb); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); pack(); setVisible(true);

Page 32: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

Last update:2015/10/29 19:41 oktatas:programozás:java:java_gui_swing http://szit.hu/doku.php?id=oktatas:programoz%C3%A1s:java:java_gui_swing

http://szit.hu/ Printed on 2015/10/31 01:12

} public static void main(String[] args) { new Program01(); }}

A program ikon csak kis méretben jelenik meg. A nyomógombhoz rendelt ikon viszont az eredetiméreteben. A megjegyzésbe tett részt ha használjuk átméretezhetjük az eredeti képméretet.

Keret stílus

//a keretdekoráció look and feel stílusúJFrame.setDefaultLookAndFeelDecorated(true); //a keret elkészítéseJFrame frame = new JFrame("A window"); //keretikon beállítása fájlbólframe.setIconImage(new ImageIcon(imgURL).getImage());

Komponens szegély

A szegélyekről

Minden JComponentnek lehet egy vagy több szegélye. A border, azaz a szegély megmondja, hogynézzen ki egy Swing komponens széle, és körbefogja azt.

A JComponent-ek számára szegélyt a setBorder() metódussal határozhatunk meg. A BorderFactoryosztály használhatjuk a szegély jellegének megadásánál.

A következőben egy szimpla panel egyszerű szegélyét adjuk meg.

JPanel pane = new JPanel();pane.setBorder(BorderFactory.createLineBorder(Color.black));

Egyszerű szegély

Egy konkrét megvalósítás

Program01.java

import javax.swing.*;import java.awt.*;

Page 33: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

2015/10/31 01:12 33/92 Java GUI Swing csomaggal

SzitWiki - http://szit.hu/

import javax.swing.border.*; class Program01 { public static void main(String args[]) { JFrame ablak = new JFrame("Szegély példa"); JLabel cimke = new JLabel("Felirat"); Border a = BorderFactory.createLineBorder(Color.black); ablak.setLayout(null); cimke.setBorder(a); cimke.setBounds(10, 10, 80, 20); ablak.add(cimke); ablak.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); ablak.setSize(400,300); ablak.setVisible(true); }}

Szegély cím beállítása

import javax.swing.*;import java.awt.*;import javax.swing.border.*; class ap{ public static void main(String args[]) { JFrame ablak = new JFrame("Szegély példa"); JLabel cimke = new JLabel("Felirat"); Border a = BorderFactory.createLineBorder(Color.black); a = BorderFactory.createTitledBorder( a, "cím", TitledBorder.LEFT, //CENTER TitledBorder.TOP); //BELOW_BOTTOM, ABOVE_TOP, TOP ablak.setLayout(null); cimke.setBorder(a); cimke.setBounds(10, 10, 120, 80); ablak.add(cimke); ablak.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); ablak.setSize(400,300); ablak.setVisible(true);

Page 34: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

Last update:2015/10/29 19:41 oktatas:programozás:java:java_gui_swing http://szit.hu/doku.php?id=oktatas:programoz%C3%A1s:java:java_gui_swing

http://szit.hu/ Printed on 2015/10/31 01:12

}}

Létrehozható szegélyfajták

javax.swing.border.LineBorderjavax.swing.border.EtchedBorderjavax.swing.border.BevelBorderjavax.swing.border.EmptyBorderjavax.swing.border.MatteBorderjavax.swing.border.TitledBorderjavax.swing.border.CompoundBorderjavax.swing.BorderFactory

Példák:

jlist1.setBorder(new EtchedBorder() );

scrollpane1.setBorder(new TitledBorder("Tartalom címe"));

Méretezett üres szegélyen belül, szegély és felirat kombinációja:

panel1.setBorder( BorderFactory.createCompoundBorder( new EmptyBorder(10, 10, 10, 10), new TitledBorder("Behelyettesítés") ));

Üres méretezett szegély és felirat:

panel1.setBorder(new TitledBorder(BorderFactory.createEmptyBorder(10, 10,10, 10), "Gyakoriságelemzés"));

Üres szegély méretmegadással:

panel1.setBorder(BorderFactory.createEmptyBorder(,10,10,10));

Utóbbit lehet így is:

panel1.setBorder(new EmptyBorder(10, 10, 10, 10) );

BevelBorder

Border bevelBorder = BorderFactory.createBevelBorder(BevelBorder.RAISED);

Több info: http://docs.oracle.com/javase/tutorial/uiswing/components/border.html

Page 35: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

2015/10/31 01:12 35/92 Java GUI Swing csomaggal

SzitWiki - http://szit.hu/

Rádiógombok

radiogomb.java

import javax.swing.JButton;import javax.swing.JFrame;import java.awt.event.ActionListener;import java.awt.event.ActionEvent;import javax.swing.ButtonGroup;import javax.swing.JRadioButton; class radiogomb extends JFrame{ JButton GombElso; ButtonGroup csoport; JRadioButton radiogomb1; JRadioButton radiogomb2; JRadioButton radiogomb3; JRadioButton radiogomb4; radiogomb() { this.setSize(800, 600); GombElso = new JButton(); radiogomb1 = new JRadioButton(); radiogomb2 = new JRadioButton(); radiogomb3 = new JRadioButton(); radiogomb4 = new JRadioButton(); csoport = new ButtonGroup(); this.setVisible(true); this.setLayout(null); GombElso.setText("Valami"); radiogomb1.setText("Valami"); radiogomb2.setText("Valami2"); radiogomb3.setText("Valami3"); radiogomb4.setText("Valami4"); radiogomb1.setSelected(false); radiogomb2.setSelected(true); radiogomb3.setSelected(false); radiogomb4.setSelected(false); GombElso.setBounds(10,10, 100, 30); radiogomb1.setBounds(120,10,100,20); radiogomb2.setBounds(120,30,100,20); radiogomb3.setBounds(120,50,100,20); radiogomb4.setBounds(120,70,100,20); csoport.add(radiogomb1);

Page 36: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

Last update:2015/10/29 19:41 oktatas:programozás:java:java_gui_swing http://szit.hu/doku.php?id=oktatas:programoz%C3%A1s:java:java_gui_swing

http://szit.hu/ Printed on 2015/10/31 01:12

csoport.add(radiogomb2); csoport.add(radiogomb3); csoport.add(radiogomb4); this.add(GombElso); this.add(radiogomb1); this.add(radiogomb2); this.add(radiogomb3); this.add(radiogomb4); GombElso.addActionListener(new ButtonListener1()); } public static void main(String args[]) { new radiogomb(); } class ButtonListener1 implements ActionListener { public void actionPerformed(ActionEvent e) { if(radiogomb1.isSelected()) GombElso.setText("Első"); if(radiogomb2.isSelected()) GombElso.setText("Második"); if(radiogomb3.isSelected()) GombElso.setText("Harmadik"); if(radiogomb3.isSelected()) GombElso.setText("Negyedik"); } }}

ButtonGroup

http://download.oracle.com/javase/1.4.2/docs/api/javax/swing/ButtonGroup.html

Táblázat

Bevezetés a táblázatkészítésbe

Egy táblázat adatainak megjelenítéséhez a JTable osztály használhatjuk. A táblázatot egy JScrollPanenevű konténerosztályra szoktuk feltenni. Ha szeretnénk a sorok és oszlopok számát futási időbenváltoztatnunk, akkor szükségünk lesz még a DefaultTableModel osztályra. Itt fontos megjegyezni,hogy egy táblázat fejléce csak JScrollPane-ra helyezve jelenik meg.

Egyszerű tábla

Program.java

import javax.swing.*;

Page 37: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

2015/10/31 01:12 37/92 Java GUI Swing csomaggal

SzitWiki - http://szit.hu/

class Program extends JFrame{ JTable tabla; Program() { String[] mezoNevek = {"id", "Név", "Település", "Kor"}; Object[][] adat = { {1, "Nagy Peter", "Szolnok", 67}, {2, "Nagy Lajos", "Szolnok", 27} }; tabla = new JTable(adat, mezoNevek); tabla.setBounds(100, 100, 300, 200); setLayout(null); add(tabla); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(800, 600); setVisible(true); } public static void main(String[] argv) { new Program(); }}

Tábla fejléccel

A táblát egy konténerhez adjuk. Esetünkben a JScrollPane osztály egy objektumához.

Program.java

import javax.swing.*; class Program extends JFrame{ JTable tabla; JScrollPane spanel; Program() { String[] mezoNevek = {"id", "Nev", "Telepules", "Kor"}; Object[][] adat = { {1, "Nagy Peter", "Szolnok", 67}, {2, "Nagy Lajos", "Szolnok", 27} };

Page 38: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

Last update:2015/10/29 19:41 oktatas:programozás:java:java_gui_swing http://szit.hu/doku.php?id=oktatas:programoz%C3%A1s:java:java_gui_swing

http://szit.hu/ Printed on 2015/10/31 01:12

tabla = new JTable(adat, mezoNevek); spanel = new JScrollPane(tabla); spanel.setBounds(50, 50, 400, 300); add(spanel); setLayout(null); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(800, 600); setVisible(true); } public static void main(String[] argv) { new Program(); }}

Oszlop, sor méretezés

Oszlop szélessége:

tabla.getColumnModel().getColumn().setPreferredWidth(10);tabla.getColumnModel().getColumn(1).setPreferredWidth(200);

A példában az első és második sor szélességét állítjuk be. Az oszlop szélessége a megadott számhozegy közelítő érték lesz.

Sorok magassága:

tabla.setRowHeight(1, 80);

A példában a második sor magasságát állítjuk be.

Szelekció

Háttérszín:

tabla.setSelectionBackground(Color.red);

Kijelöltek indexének kinyerése:

int sor = tabla.getSelectedRow();int osz = tabla.getSelectedColumn();

Szelekciós mód:

Page 39: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

2015/10/31 01:12 39/92 Java GUI Swing csomaggal

SzitWiki - http://szit.hu/

// ListSelectionModel.SINGLE_INTERVAL_SELECTION// ListSelectionModel.SINGLE_SELECTION// ListSelectionModel.MULTIPLE_INTERVAL_SELECTIONtabla.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

tabla.setColumnSelectionAllowed(true);

tabla.setRowSelectionAllowed(false);

tabla.setCellSelectionEnabled(true);

Igazítás

DefaultTableCellRenderer rightRenderer = new DefaultTableCellRenderer();// JLabel.RIGHT, JLabel.CENTER, JLabel.LEFT (alapértelmezés)// DefaultTableCellRenderer.RIGHT, .CENTER, .RIGHTrightRenderer.setHorizontalAlignment(DefaultTableCellRenderer.CENTER);tabla.getColumnModel().getColumn().setCellRenderer(rightRenderer);

Táblázat változásának figyelése

import javax.swing.event.*;... tabla.getModel().addTableModelListener(new TableModelListener() { public void tableChanged(TableModelEvent ev) { System.out.println("változott egy cella"); }});

Fejléc csere

A táblázat fejlécét a modellben tároljuk és ott változtatjuk. A feladatra két metódus áll rendelkezésre.

Lehet így:

void setColumnIdentifiers(Object[] newIdentifiers)

Lehet így:

void setColumnIdentifiers(Vector columnIdentifiers)

Konkrét megvalósítás:

Object[] obj ={"Az", "Név", "Anyja neve", "Település", "Lakcím", "Fizetés", "Születés", "Jutalom", "Beosztás Az"};

Page 40: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

Last update:2015/10/29 19:41 oktatas:programozás:java:java_gui_swing http://szit.hu/doku.php?id=oktatas:programoz%C3%A1s:java:java_gui_swing

http://szit.hu/ Printed on 2015/10/31 01:12

tableModel.setColumnIdentifiers(obj);

Tartalom cseréje

//Tábla tartalmának beállítása Első sor, második mezőtabla.getModel().setValueAt("Feher Bela", , 1);

A tabla.getModel() metódus egy TableModel típusú objektumot ad vissza.

void addTableModelListener(TableModelListener l) Egy eseményfigyelő hozzáadásaint getColumnCount() A mezők számát adja vissza

String getColumnName(int mezoIndex) Adott indexű mező nevét adja visszaint getRowCount() A sorok számát adja vissza

Object getValueAt(int sorIndex, int mezoIndex) Egy cell értékét adjaboolean isCellEditable(int sorIndex, int mezoIndex) Szerkeszthető-e?

void removeTableModelListener(TableModelListener l) Az változások figyelésénekkikapcsolása

void setValueAt(Object ertek, int sorIndex, int mezoIndex) Egy cella értékének beállítása

Oszlopok, sorok beszúrása

A feladathoz használnunk kell a DefaultTableModel osztályt. Ezzel létrehozzuk egy model objektumot,amelyet a JTable konstruktorban átadunk.

Program.java

import javax.swing.*;import javax.swing.table.*;class Program extends JFrame{ JTable tabla; JScrollPane spanel; Program() { String[] mezoNevek = {"id", "Nev", "Telepules", "Kor"}; Object[][] adat = { {1, "Nagy Peter", "Szolnok", 67}, {2, "Nagy Lajos", "Szolnok", 27} }; DefaultTableModel model = new DefaultTableModel(adat,mezoNevek); tabla = new JTable(model); spanel = new JScrollPane(tabla); spanel.setBounds(50, 50, 400, 300);

Page 41: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

2015/10/31 01:12 41/92 Java GUI Swing csomaggal

SzitWiki - http://szit.hu/

//Mező hozzáadása model.addColumn("Fizetes"); //Beszúrás az utolsó helyre model.insertRow(tabla.getRowCount(),new Object[]{"","","","",""}); //Hozzáfűzés az utolsó helyre model.addRow(new Object[]{3, "Akad Tibor", "Miskolc", 37}); add(spanel); setLayout(null); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(800, 600); setVisible(true); } public static void main(String[] argv) { new Program(); }}

További metódusok használhatók a DefaultTableModel osztályból.

Cella színezése

Program01.java

import javax.swing.JFrame;import javax.swing.JTable;import javax.swing.JLabel;import java.awt.Component;import java.awt.Color;import javax.swing.table.TableCellRenderer; class Program01 extends JFrame{ private JTable tabla; public Program01() { setLayout(null); tabla = new JTable(9, 9); tabla.setBounds(100, 100, 300, 200); int columnWidht = 20; int rowHeight = 25;

Page 42: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

Last update:2015/10/29 19:41 oktatas:programozás:java:java_gui_swing http://szit.hu/doku.php?id=oktatas:programoz%C3%A1s:java:java_gui_swing

http://szit.hu/ Printed on 2015/10/31 01:12

for(int i=; i<9; i++)tabla.getColumnModel().getColumn(i).setPreferredWidth(columnWidht); for(int i=; i<9; i++) tabla.setRowHeight(i, rowHeight); tabla.setDefaultRenderer(Object.class, newMyTableCellRenderer()); tabla.getModel().setValueAt(Color.red, 3, 3); tabla.getModel().setValueAt(Color.red, 3, 5); add(tabla); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(800, 600); setVisible(true); } public static void main(String args[]) { new Program01(); } class MyTableCellRenderer extends JLabel implementsTableCellRenderer { MyTableCellRenderer() { setOpaque(true); } public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, introw, int col) { setBackground((Color) value); return this; } }}

Néhány metódus:

setShowGrid(boolean bol)

setGridColor(Color col):

setShowVerticalLines():

Rajzolás a táblázaton

Ha rajzolni szeretnék egy táblázatra, akkor helyfoglalást (példányosítás) a következő módon adjukmeg.

Page 43: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

2015/10/31 01:12 43/92 Java GUI Swing csomaggal

SzitWiki - http://szit.hu/

JTable tabla = new JTable(9, 9){ protected void paintComponent(Graphics g) { super.paintComponent(g); g.setColor (Color.black); g.drawString("1", 2, 12); }};

Táblázat fontméret

tabla.setFont(new Font("Serif", Font.BOLD, 12));

Táblázat színezés

Egész tábla háttérszíne:

tabla.setBackground(Color.blue);

Szöveg színe:

tabla.setForeground(Color.yellow);

Rács színe:

tabla.setGridColor(Color.black);

Szegély színe:

tabla.setBorder(new MatteBorder(1, 1, 1, 1, Color.RED));

Az egész táblázat fontja

tabla.setFont(new Font("Serif", Font.BOLD, 16));

A táblázatra rajzoláskor is ezt használjuk, hacsak nem adunk meg rajzolásnál mást.

TableModel használata

TableModel tableModel = new AbstractTableModel(){ @Override public Object getValueAt(int row, int col) { return new Integer(row*col); };

Page 44: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

Last update:2015/10/29 19:41 oktatas:programozás:java:java_gui_swing http://szit.hu/doku.php?id=oktatas:programoz%C3%A1s:java:java_gui_swing

http://szit.hu/ Printed on 2015/10/31 01:12

@Override public int getColumnCount(){return 10;}; @Override public int getRowCount(){return 10;}; }; JTable table = new JTable(tableModel); JScrollPane jsp = new JScrollPane(table);

Irodalom a táblázathoz

Linkek:

http://www.java2s.com/Tutorial/Java/0240__Swing/CreatingaJTable.htmhttp://www.exampledepot.com/egs/javax.swing.table/pkg.htmlhttp://www.java2s.com/Code/Java/Swing-Components/SortableTableExample.htmhttp://www.javaworld.com/javaworld/javatips/jw-javatip77.htmlhttp://quicktable.org/jtable/quicktablefinal.htm#9http://docs.oracle.com/javase/tutorial/uiswing/components/table.htmlhttp://docs.oracle.com/javase/6/docs/api/javax/swing/JTable.html

Ablakméret lekérdezése

import java.awt.Dimension;import javax.swing.*;import java.awt.event.ActionListener;import java.awt.event.ActionEvent; class prog extends JFrame{ JButton gomb; JLabel cimke; prog() { setLayout(null); gomb = new JButton("Méret"); cimke = new JLabel("Adatok"); gomb.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { Dimension ablakMeret = getSize(); int ablakMagassag = ablakMeret.height; int ablakSzelesseg = ablakMeret.width; cimke.setText(Integer.toString(ablakMagassag) + "x" +Integer.toString(ablakSzelesseg)); } }); gomb.setBounds(20, 20, 100, 30); cimke.setBounds(100,100, 100,30); add(gomb);

Page 45: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

2015/10/31 01:12 45/92 Java GUI Swing csomaggal

SzitWiki - http://szit.hu/

add(cimke); setSize(800,600); setVisible(true); } public static void main(String args[]) { new prog(); }}

Java GUI Füles panel

Füles ablakok elkészítésére a TabbedPane osztályt használjuk. Az alábbiakban ennek használatáralátunk egy példát.

Fülespanel 001

import javax.swing.*;import java.awt.BorderLayout; class fulespanel extends JFrame{ private JTabbedPane fulespanelek; private JPanel panel1; private JPanel panel2; private JPanel panel3; fulespanel() { setTitle("Fülespanelek"); setSize(800,600); setLayout( new BorderLayout() ); panel1Keszites(); panel2Keszites(); panel3Keszites(); fulespanelek = new JTabbedPane(); fulespanelek.addTab("Első", panel1); fulespanelek.addTab("Második", panel2); fulespanelek.addTab("Harmadik", panel3); add(fulespanelek); } void panel1Keszites() {

Page 46: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

Last update:2015/10/29 19:41 oktatas:programozás:java:java_gui_swing http://szit.hu/doku.php?id=oktatas:programoz%C3%A1s:java:java_gui_swing

http://szit.hu/ Printed on 2015/10/31 01:12

panel1 = new JPanel(); panel1.setLayout( null ); JLabel cimke1 = new JLabel( "Első panel felirata" ); cimke1.setBounds( 10, 15, 150, 20 ); panel1.add( cimke1 ); } void panel2Keszites() { panel2 = new JPanel(); panel2.setLayout( null ); JLabel cimke1 = new JLabel( "Második panel felirata" ); cimke1.setBounds( 10, 15, 150, 20 ); panel2.add( cimke1 ); } void panel3Keszites() { panel3 = new JPanel(); panel3.setLayout( null ); JLabel cimke1 = new JLabel( "Harmadik panel felirata" ); cimke1.setBounds( 10, 15, 150, 20 ); panel3.add( cimke1 ); } public static void main(String args[]) { fulespanel ablak = new fulespanel(); ablak.setVisible(true); }}

Java füles panel külső linkek

http://www.cs.cf.ac.uk/Dave/HCI/HCI_Handout_CALLER/node61.htmlhttp://ngweb.atw.hu/applets/tabbedpaneapplet.htmlhttp://www.codeproject.com/KB/tabs/JTabbedPane.aspx

Panel használata

Program.java

import javax.swing.*;import java.awt.*;class Program extends JFrame{ JPanel panel1; Program() { panel1 = new JPanel();

Page 47: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

2015/10/31 01:12 47/92 Java GUI Swing csomaggal

SzitWiki - http://szit.hu/

panel1.setSize(200, 200); panel1.setLocation(50, 50); panel1.setBackground(Color.blue); this.setLayout(null); this.getContentPane().add(panel1); this.setSize(800, 600); this.setLocationRelativeTo(null); this.setVisible(true); } public static void main(String args[]) { new Program(); }}

Menü

Egyszerű menü

Program, egyetlen menü, egyetlen menüpontjával.

Program.java

import javax.swing.*;import java.awt.event.*; class Program extends JFrame implements ActionListener{ JMenuBar menusav; JMenu filemenu; JMenuItem kilepesitem; Program() { menusav = new JMenuBar(); filemenu = new JMenu("Fájl"); kilepesitem = new JMenuItem("Kilépés"); kilepesitem.addActionListener(this); setJMenuBar(menusav); menusav.add(filemenu); filemenu.add(kilepesitem); setSize(800, 600); setVisible(true);

Page 48: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

Last update:2015/10/29 19:41 oktatas:programozás:java:java_gui_swing http://szit.hu/doku.php?id=oktatas:programoz%C3%A1s:java:java_gui_swing

http://szit.hu/ Printed on 2015/10/31 01:12

} public static void main(String args[]) { new Program(); } public void actionPerformed(ActionEvent e) { if(e.getSource() == kilepesitem) System.exit(); }}

Szeparátor hozzáadása

Program.java

import javax.swing.*;import java.awt.event.*; class Program extends JFrame implements ActionListener{ JMenuBar menusav; JMenu filemenu; JMenuItem kilepesitem; JMenuItem ujitem; Program() { menusav = new JMenuBar(); filemenu = new JMenu("Fájl"); kilepesitem = new JMenuItem("Kilépés"); ujitem = new JMenuItem("Új"); kilepesitem.addActionListener(this); setJMenuBar(menusav); menusav.add(filemenu); filemenu.add(ujitem); filemenu.addSeparator(); filemenu.add(kilepesitem); setSize(800, 600); setVisible(true); } public static void main(String args[]) { new Program();

Page 49: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

2015/10/31 01:12 49/92 Java GUI Swing csomaggal

SzitWiki - http://szit.hu/

} public void actionPerformed(ActionEvent e) { if(e.getSource() == kilepesitem) System.exit(); }}

Rádiógomb és jelölőnégyzet

Program.java

import javax.swing.*;import java.awt.event.*; class Program extends JFrame implements ActionListener, ItemListener{ JMenuBar menusav; JMenu filemenu; JMenuItem kilepesitem; JMenuItem ujitem; JRadioButtonMenuItem kodolasitem; JRadioButtonMenuItem kodolasitem2; JCheckBoxMenuItem mentesitem; Program() { menusav = new JMenuBar(); filemenu = new JMenu("Fájl"); kilepesitem = new JMenuItem("Kilépés"); ujitem = new JMenuItem("Új"); kodolasitem = new JRadioButtonMenuItem("Kódolás"); kodolasitem2 = new JRadioButtonMenuItem("Kódolás2"); mentesitem = new JCheckBoxMenuItem("Automatikus mentés"); kilepesitem.addActionListener(this); kilepesitem.setMnemonic(KeyEvent.VK_C); setJMenuBar(menusav); menusav.add(filemenu); filemenu.add(ujitem); filemenu.addSeparator(); filemenu.add(kodolasitem); filemenu.add(kodolasitem2); filemenu.add(mentesitem); filemenu.addSeparator(); filemenu.add(kilepesitem);

Page 50: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

Last update:2015/10/29 19:41 oktatas:programozás:java:java_gui_swing http://szit.hu/doku.php?id=oktatas:programoz%C3%A1s:java:java_gui_swing

http://szit.hu/ Printed on 2015/10/31 01:12

setSize(800, 600); setVisible(true); } public static void main(String args[]) { new Program(); } public void actionPerformed(ActionEvent e) { if(e.getSource() == kilepesitem) System.exit(); } public void itemStateChanged(ItemEvent e) { }}

ComboBox

Program.java

import javax.swing.*; class Program extends JFrame{ JComboBox combo; Program() { combo = new JComboBox(); combo.setSize(100, 30); combo.addItem("Első"); combo.addItem("Második"); combo.addItem("Harmadik"); combo.addItem("Negyedik"); combo.addItem("Ötödik"); add(combo); setLayout(null); setSize(200, 100); setVisible(true); } public static void main(String args[]) { new Program();

Page 51: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

2015/10/31 01:12 51/92 Java GUI Swing csomaggal

SzitWiki - http://szit.hu/

}}

A ComboBox alapértelmezett magassága 24 pont.

combo.removeAllItem();

Ha kiválasztott változott:

import java.awt.event.ItemEvent;import java.awt.event.ItemListener; ... comboBox.addItemListener(new ItemListener(){ public void itemStateChanged(ItemEvent e) { }});

Ha kiválasztunk egy elemet, akkor az esemény kétszer váltódik ki. Az e.getStateChange() először 2,majd 1-et ad vissza. Ez alapján szétválaszthatjuk a két eseményt:

groupComboBox.addItemListener(new ItemListener(){ public void itemStateChanged(ItemEvent e) { if(e.getStateChange()==2) ; //Csinálunk valamit }});

int a = lld.getItemCount();int b = lld.getSelectedIndex();

Adott elem lekérése:

if(lld.getItemCount()>) String str = (String) lld.getSelectedItem();

A getSelectedItem() metódus Object típust ad vissza.

Rádiógomb

Page 52: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

Last update:2015/10/29 19:41 oktatas:programozás:java:java_gui_swing http://szit.hu/doku.php?id=oktatas:programoz%C3%A1s:java:java_gui_swing

http://szit.hu/ Printed on 2015/10/31 01:12

Egyszerű rádiógomb

Program.java

import javax.swing.*;import java.awt.*; class Program extends JFrame{ ButtonGroup group; JRadioButton radio1; JRadioButton radio2; JPanel panel; Program() { group = new ButtonGroup(); radio1 = new JRadioButton("Első"); radio2 = new JRadioButton("Második"); panel = new JPanel(); group.add(radio1); group.add(radio2); panel.add(radio1); panel.add(radio2); add(panel); panel.setBorder(BorderFactory.createTitledBorder("Valami")); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(300, 200); setVisible(true); } public static void main(String args[]) { new Program(); }}

A rádiógombokat, hozzá kell adni a ButtonGroup objektumhoz is, de ez csak csoportosításra szolgál! Amegjelenés érdekében a JPanel objektumhoz is hozzá kell adni. Persze a csoportosításnak csak akkorvan értelme, ha több csoportunk is van.

Csoportok

Program.java

import javax.swing.*;import java.awt.*;

Page 53: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

2015/10/31 01:12 53/92 Java GUI Swing csomaggal

SzitWiki - http://szit.hu/

class Program extends JFrame{ ButtonGroup group1; ButtonGroup group2; JRadioButton[] radio1; JRadioButton[] radio2; JPanel panel1; JPanel panel2; Program() { group1 = new ButtonGroup(); group2 = new ButtonGroup(); String[] s1 = {"Első", "Második", "Harmadik", "Negyedik","Ötödik", "Hatodik"}; String[] s2 = {"1", "2", "3", "4", "5", "6"}; radio1 = new JRadioButton[6]; radio2 = new JRadioButton[6]; panel1 = new JPanel(); panel2 = new JPanel(); for(int i=; i<6;i++) { radio1[i] = new JRadioButton(s1[i]); group1.add(radio1[i]); panel1.add(radio1[i]); radio2[i] = new JRadioButton(s2[i]); group2.add(radio2[i]); panel2.add(radio2[i]); } panel1.setLayout(new GridLayout(3, 2)); panel2.setLayout(new GridLayout(3, 2)); add(panel1); add(panel2); panel1.setBorder(BorderFactory.createTitledBorder("Színek"));panel2.setBorder(BorderFactory.createTitledBorder("Vastagság")); setLayout(new FlowLayout()); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(300, 200); setVisible(true); } public static void main(String args[]) { new Program();

Page 54: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

Last update:2015/10/29 19:41 oktatas:programozás:java:java_gui_swing http://szit.hu/doku.php?id=oktatas:programoz%C3%A1s:java:java_gui_swing

http://szit.hu/ Printed on 2015/10/31 01:12

}}

Az utóbbi példában már tömbként hozzuk létre a rádiógombokat.

Rádiógomb panel osztállyal

Hosszútávon jobban járunk, ha a panelt külön osztályba rakjuk:

Program.java

import javax.swing.*;import java.awt.*; class SajatPanel extends JPanel{ ButtonGroup group; JRadioButton[] radio; SajatPanel(String[] felirat) { group = new ButtonGroup(); radio = new JRadioButton[6]; for(int i=; i<6;i++) { radio[i] = new JRadioButton(felirat[i]); group.add(radio[i]); add(radio[i]); } }} class Program extends JFrame{ SajatPanel panel1; SajatPanel panel2; Program() { String[] s1 = {"Első", "Második", "Harmadik", "Negyedik","Ötödik", "Hatodik"}; String[] s2 = {"1", "2", "3", "4", "5", "6"}; panel1 = new SajatPanel(s1); panel2 = new SajatPanel(s2); panel1.setLayout(new GridLayout(3, 2));

Page 55: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

2015/10/31 01:12 55/92 Java GUI Swing csomaggal

SzitWiki - http://szit.hu/

panel2.setLayout(new GridLayout(3, 2)); add(panel1); add(panel2); panel1.setBorder(BorderFactory.createTitledBorder("Színek"));panel2.setBorder(BorderFactory.createTitledBorder("Vastagság")); setLayout(new FlowLayout()); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(300, 200); setVisible(true); } public static void main(String args[]) { new Program(); }}

Szöveghely

Program.java

import javax.swing.*; class Program extends JFrame{ JTextArea hely; Program() { hely = new JTextArea(); add(hely); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(800, 600); setVisible(true); } public static void main(String args[]) { new Program(); }}

Page 56: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

Last update:2015/10/29 19:41 oktatas:programozás:java:java_gui_swing http://szit.hu/doku.php?id=oktatas:programoz%C3%A1s:java:java_gui_swing

http://szit.hu/ Printed on 2015/10/31 01:12

Színezés

Egy címkét színezünk a példaprogramban:

Program.java

import javax.swing.*;import java.awt.*; class Program extends JFrame{ JLabel cimke; Program() { cimke = new JLabel("Valamiaaaaaaaaaaa"); cimke.setForeground(Color.blue); add(cimke); pack(); setVisible(true); } public static void main(String args[]) { new Program(); }}

A címke hátterének színezése:

Program.java

import javax.swing.*;import java.awt.*; class Program extends JFrame{ JLabel cimke; JLabel cimke2; JPanel panel; Program() { cimke = new JLabel("Valamiaaaaaaaaaaa"); cimke2 = new JLabel("rövid", JLabel.CENTER); panel = new JPanel(); cimke2.setForeground(Color.blue); cimke2.setFont(new Font("Arial", Font.BOLD, 20)); panel.add(cimke2);

Page 57: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

2015/10/31 01:12 57/92 Java GUI Swing csomaggal

SzitWiki - http://szit.hu/

panel.setBackground(Color.white); setLayout(new GridLayout(,1)); add(cimke); add(panel); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); pack(); setVisible(true); } public static void main(String args[]) { new Program(); }}

Tulajdonképpen egy panelra tesszük, és azt színezzük.

Fontok

Program.java

import javax.swing.*;import java.awt.*; class Program extends JFrame{ JLabel cimke; Program() { cimke = new JLabel("Valamiaaaaaaaaaaa"); cimke.setForeground(Color.blue); cimke.setFont(new Font("Arial", Font.BOLD, 20)); add(cimke); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); pack(); setVisible(true); } public static void main(String args[]) { new Program(); }}

Page 58: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

Last update:2015/10/29 19:41 oktatas:programozás:java:java_gui_swing http://szit.hu/doku.php?id=oktatas:programoz%C3%A1s:java:java_gui_swing

http://szit.hu/ Printed on 2015/10/31 01:12

Igazítás

Program.java

import javax.swing.*;import java.awt.*; class Program extends JFrame{ JLabel cimke; JLabel cimke2; Program() { cimke = new JLabel("Valamiaaaaaaaaaaa"); cimke2 = new JLabel("rövid", JLabel.CENTER); cimke.setForeground(Color.blue); cimke.setFont(new Font("Arial", Font.BOLD, 20)); setLayout(new GridLayout(,1)); add(cimke); add(cimke2); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); pack(); setVisible(true); } public static void main(String args[]) { new Program(); }}

Másik ablak

Az alábbiakban egy másik ablakot indítunk, majd arra is felteszünk egy gombot, ami annyit csinál,hogy bezárja azt.

Program.java

import javax.swing.*;import java.awt.event.*; class Mas extends JFrame{ JButton gomb; Mas() {

Page 59: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

2015/10/31 01:12 59/92 Java GUI Swing csomaggal

SzitWiki - http://szit.hu/

gomb = new JButton("Nyomj"); gomb.addActionListener(new GombKezelo()); setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); add(gomb); setSize(300, 200); } class GombKezelo implements ActionListener { public void actionPerformed(ActionEvent e) { dispose(); } }} class Program extends JFrame{ JButton gomb; Program() { gomb = new JButton("Nyomj"); gomb.addActionListener(new GombKezelo()); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); add(gomb); setSize(200, 100); setVisible(true); } class GombKezelo implements ActionListener { public void actionPerformed(ActionEvent e) { Mas m = new Mas(); m.setVisible(true); } } public static void main(String args[]) { new Program(); }}

Vegyük észre! A következő metódussal megadjuk, hogy az ablak bezárás eseményre töröljük az újablakot:

setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

A dispose() metódussal pedig kiváltom a bezáráseseményt:

Page 60: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

Last update:2015/10/29 19:41 oktatas:programozás:java:java_gui_swing http://szit.hu/doku.php?id=oktatas:programoz%C3%A1s:java:java_gui_swing

http://szit.hu/ Printed on 2015/10/31 01:12

dispose();

Ha másik ablak párbeszédablak

Program.java

import javax.swing.*;import java.awt.event.*;class Program extends JFrame{ JButton masikgomb; Program() { masikgomb = new JButton("Masik"); masikgomb.addActionListener(new MasikGombClick()); masikgomb.setBounds( 50, 50, 100, 25); add(masikgomb); setLayout(null); setDefaultCloseOperation(JDialog.EXIT_ON_CLOSE); setSize(400, 300); setVisible(true); } public static void main(String[] argv) { new Program(); } class MasikGombClick implements ActionListener { public void actionPerformed(ActionEvent e) { Parbeszed parbeszed = new Parbeszed(); parbeszed.show(); } } class Parbeszed extends JDialog { Parbeszed() { setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); setSize(400, 300); setLocationRelativeTo(this); setVisible(true); } }}

Page 61: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

2015/10/31 01:12 61/92 Java GUI Swing csomaggal

SzitWiki - http://szit.hu/

DO_NOTHING_ON_CLOSE Nem teszünk semmitHIDE_ON_CLOSE Az ablak elrejtéseDISPOSE_ON_CLOSE Az ablak elrejtése és törlése

Fájlválasztó párbeszédablak

Egyszerűen parancssorból:

Program.java

import javax.swing.JFileChooser;class Program02{ Program02() { JFileChooser fc = new JFileChooser(); fc.showOpenDialog(null); String utvonal = fc.getSelectedFile().getPath(); System.out.println(utvonal); } public static void main(String[] args) { new Program02(); }}

Filter alkalmazása:

Program.java

import javax.swing.*;import java.awt.event.*;import javax.swing.filechooser.*;import java.awt.image.*;import java.io.File; class ImageFilter extends FileFilter{ private final String[] okFileExtensions = new String[] {"jpg", "png", "gif"}; public boolean accept(File file) { for (String extension : okFileExtensions) { if (file.getName().toLowerCase().endsWith(extension))

Page 62: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

Last update:2015/10/29 19:41 oktatas:programozás:java:java_gui_swing http://szit.hu/doku.php?id=oktatas:programoz%C3%A1s:java:java_gui_swing

http://szit.hu/ Printed on 2015/10/31 01:12

{ return true; } } return false; } public String getDescription() { return "Képek"; }} class Program extends JFrame{ JFileChooser fc = new JFileChooser(); JButton gomb; Program() { //~ fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); fc.setAcceptAllFileFilterUsed(false); fc.addChoosableFileFilter(new ImageFilter()); gomb = new JButton("Nyomj"); gomb.addActionListener(new GombClick()); add(gomb); setSize(400, 300); setVisible(true); } class GombClick implements ActionListener { public void actionPerformed(ActionEvent e) { int a = fc.showOpenDialog(Program.this); setTitle(fc.getSelectedFile().getPath()); } } public static void main(String args[]) { new Program(); }}

Kép beillesztése

Page 63: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

2015/10/31 01:12 63/92 Java GUI Swing csomaggal

SzitWiki - http://szit.hu/

Kép nyomógombon

import javax.swing.*;import java.awt.*;class Program extends JFrame{ JButton gomb; Program() { ImageIcon kep = new ImageIcon("kep.png"); gomb = new JButton(kep); gomb.setBounds(10, 10, 100, 30); add(gomb); setLayout(null); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(300, 200); setVisible(true); } public static void main(String args[]) { new Program(); }}

Kép panelen

Program.java

import javax.swing.*;import java.awt.*; class KepPanel extends JPanel{ Image image = null; KepPanel() { image = new ImageIcon("kep.png").getImage(); } public void paintComponent(Graphics g) { g.drawImage(image, , , 200, 200, null); } } class Program extends JFrame{ KepPanel keppanel;

Page 64: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

Last update:2015/10/29 19:41 oktatas:programozás:java:java_gui_swing http://szit.hu/doku.php?id=oktatas:programoz%C3%A1s:java:java_gui_swing

http://szit.hu/ Printed on 2015/10/31 01:12

Program() { keppanel = new KepPanel(); keppanel.setBounds(10, 10, 200, 200); add(keppanel); setLayout(null); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(400, 300); setVisible(true); } public static void main(String args[]) { new Program(); }}

Az alábbi rajzoló utasítást:

g.drawImage(image, , , 200, 200, null);

Így is írhattuk volna:

g.drawImage(image, , , null);

Ekkor azonban a kép nem illeszkedik a panelen elhelyezett kép nagyságához. Nagyobb képnél csak akép bal felső sarka fog látszani.

Kép panelen 2

Program.java

import javax.swing.*;import java.awt.*;import javax.imageio.*;import java.io.*; class KepPanel extends JPanel{ Image image = null; KepPanel() throws IOException { image = ImageIO.read(new File("kep.png")); } @Override public void paintComponent(Graphics g) {

Page 65: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

2015/10/31 01:12 65/92 Java GUI Swing csomaggal

SzitWiki - http://szit.hu/

g.drawImage(image, , , 100, 100, null); }} class Program extends JFrame{ KepPanel panel; Program() throws IOException { panel = new KepPanel(); panel.setBounds(10, 10, 150, 150); add(panel); setLayout(null); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(400, 300); setVisible(true); } public static void main(String args[]) throws IOException { new Program(); }}

JToggleButton

if(toggleButton.isSelected()) ...

Program01.java

import javax.swing.JFrame;import javax.swing.JToggleButton;import javax.swing.JButton;import java.awt.FlowLayout;import java.awt.event.ActionListener;import java.awt.event.ActionEvent; class Program01 extends JFrame implements ActionListener { JToggleButton toggleButton = new JToggleButton("Kapcsoló"); JButton button = new JButton("Mehet"); Program01() { button.addActionListener(this); setLayout(new FlowLayout()); add(toggleButton); add(button);

Page 66: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

Last update:2015/10/29 19:41 oktatas:programozás:java:java_gui_swing http://szit.hu/doku.php?id=oktatas:programoz%C3%A1s:java:java_gui_swing

http://szit.hu/ Printed on 2015/10/31 01:12

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(400, 300); setVisible(true); } public void actionPerformed(ActionEvent event) { if(toggleButton.isSelected()) { setTitle("Kiválasztva"); }else { setTitle("Nincs kiválasztva"); } } public static void main(String[] args) { new Program01(); }}

Figyeljük, hogy változott-e a gomb állapota:

Program01.java

import javax.swing.JFrame;import javax.swing.JToggleButton;import javax.swing.JButton;import java.awt.FlowLayout;import java.awt.event.ActionListener;import java.awt.event.ActionEvent;import java.awt.event.ItemListener;import java.awt.event.ItemEvent; class Program01 extends JFrame implements ActionListener, ItemListener { JToggleButton toggleButton = new JToggleButton("Kapcsoló"); JButton button = new JButton("Mehet"); Program01() { button.addActionListener(this); toggleButton.addItemListener(this); setLayout(new FlowLayout()); add(toggleButton); add(button); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(400, 300); setVisible(true); } public void actionPerformed(ActionEvent event) { if(toggleButton.isSelected()) { setTitle("Kiválasztva"); }else { setTitle("Nincs kiválasztva"); }

Page 67: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

2015/10/31 01:12 67/92 Java GUI Swing csomaggal

SzitWiki - http://szit.hu/

} public void itemStateChanged(ItemEvent event) { setTitle(getTitle() + "_"); } public static void main(String[] args) { new Program01(); }}

Program01.java

import javax.swing.JFrame;import javax.swing.JToggleButton;import javax.swing.JButton;import java.awt.FlowLayout;import java.awt.event.ActionListener;import java.awt.event.ActionEvent;import java.awt.event.ItemListener;import java.awt.event.ItemEvent; class Program01 extends JFrame implements ActionListener, ItemListener { JToggleButton toggleButton = new JToggleButton("Kapcsoló"); JButton button = new JButton("Mehet"); Program01() { button.addActionListener(this); toggleButton.addItemListener(this); setLayout(new FlowLayout()); add(toggleButton); add(button); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(400, 300); setVisible(true); } public void actionPerformed(ActionEvent event) { if(toggleButton.isSelected()) { setTitle("Kiválasztva"); }else { setTitle("Nincs kiválasztva"); } } public void itemStateChanged(ItemEvent event) { if(event.getStateChange()==ItemEvent.SELECTED) { setTitle("Kiválasztva"); }else if(event.getStateChange()==ItemEvent.DESELECTED) { setTitle("Nincs kiválasztva"); } } public static void main(String[] args) {

Page 68: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

Last update:2015/10/29 19:41 oktatas:programozás:java:java_gui_swing http://szit.hu/doku.php?id=oktatas:programoz%C3%A1s:java:java_gui_swing

http://szit.hu/ Printed on 2015/10/31 01:12

new Program01(); }}

JFormattedTextField

Az alábbi példában csak egy telefonszámot szeretnénk megengedni beírni.

Program.java

import javax.swing.*;import java.text.*;import javax.swing.text.*; class Program extends JFrame{ JFormattedTextField mezo; Program() { MaskFormatter mf = null; try{ mf = new MaskFormatter("+36 (##) ###-####"); mf.setPlaceholderCharacter('_'); //Nemkötelező, de hasznos }catch(ParseException e){}; mezo = new JFormattedTextField(mf); mezo.setBounds(50, 50, 150, 30); add(mezo); setLayout(null); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(400, 300); setVisible(true); } public static void main(String args[]) { new Program(); }}

Csak a következő három karaktert szeretnénk elfogadni: „abc”.

mf = new MaskFormatter("**");mf.setPlaceholderCharacter('_');mf.setValidCharacters("abc");

Page 69: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

2015/10/31 01:12 69/92 Java GUI Swing csomaggal

SzitWiki - http://szit.hu/

Karakter Leírás# Bármilyen szám érvényes (Character.isDigit)' Escape karakter, használhatók speciális formázó escape karakterekU Bármilyen karakter (Character.isLetter) A kisbetűk nagybetűssént viselkednekL Bármilyen karakter (Character.isLetter) A nagybetűk kisbetűsként értelmezendőkA Bármilyen karakter vagy szám (Character.isLetter vagy Character.isDigit)? Bármilyen karakter (Character.isLetter)* BármiH Bármilyen hexkarakter (0-9, a-f vagy A-F)

http://docs.oracle.com/javase/tutorial/uiswing/components/formattedtextfield.htmlhttp://www.java2s.com/Tutorial/Java/0240__Swing/JFormattedTextField.htm

JSlider

A JSlider egy értékskála létrehozására való. A következő példaprogramban megadunk minimum ésmaximum értékeket, beállítjuk függőlegesre, adunk hozzá számozást. Amint változtatja felhasználó azértéket, azonnal megjelenítjük egy beviteli mezőben.

Program.java

import javax.swing.*;import javax.swing.event.*;import java.awt.*;class Program extends JFrame{ JSlider skala; JTextField mezo; Program() { skala = new JSlider(); mezo = new JTextField(); skala.setMinimum(); skala.setMaximum(100); skala.setValue(20); skala.setOrientation(SwingConstants.VERTICAL); skala.setLabelTable(skala.createStandardLabels(10)); skala.setPaintLabels(true); skala.addChangeListener(new skala_Change()); mezo.setSize(50, 30); mezo.setText("kezdetben"); setLayout(new FlowLayout()); add(skala); add(mezo); pack();

Page 70: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

Last update:2015/10/29 19:41 oktatas:programozás:java:java_gui_swing http://szit.hu/doku.php?id=oktatas:programoz%C3%A1s:java:java_gui_swing

http://szit.hu/ Printed on 2015/10/31 01:12

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(50, 300); setVisible(true); } class skala_Change implements ChangeListener { public void stateChanged(ChangeEvent e) { int a = skala.getValue(); mezo.setText(Integer.toString(a)); } } public static void main(String[] args) { new Program(); }}

JProgressBar

A következő program egy folyamatsávot jelenít meg, amely a 20-as értéknél áll. A nyomógombothasználva növelhetem annak értékét.

Program.java

import javax.swing.JFrame;import javax.swing.JProgressBar;import javax.swing.JButton;import java.awt.event.ActionListener;import java.awt.event.ActionEvent;class Program extends JFrame{ JProgressBar folyamatsav; JButton gomb; Program() { folyamatsav = new JProgressBar(); gomb = new JButton("Növel"); folyamatsav.setMinimum(); folyamatsav.setMaximum(100); folyamatsav.setValue(20); folyamatsav.setBounds(50, 50, 200, 30); gomb.setBounds(100, 100, 100, 30); gomb.addActionListener(new Gomb_Click()); add(folyamatsav);

Page 71: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

2015/10/31 01:12 71/92 Java GUI Swing csomaggal

SzitWiki - http://szit.hu/

add(gomb); setLayout(null); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(400, 300); setVisible(true); } class Gomb_Click implements ActionListener { public void actionPerformed(ActionEvent e) { int a = folyamatsav.getValue(); a++; folyamatsav.setValue(a); } } public static void main(String[] args) { new Program(); }}

Függőleges folyamatsávhoz állítsuk be a következőket:

folyamatsav.setBounds(50, 50, 30, 200);folyamatsav.setOrientation(SwingConstants.VERTICAL);

A javax.swing.SwingConstans felsorolt típust használjuk paraméterként.

Százalékos megjelenítés:

Program.java

import javax.swing.JFrame;import javax.swing.JProgressBar;import javax.swing.JButton;import java.awt.event.ActionListener;import java.awt.event.ActionEvent;import javax.swing.SwingConstants;class Program extends JFrame{ JProgressBar folyamatsav; JButton gomb; Program() { folyamatsav = new JProgressBar(); gomb = new JButton("Klikk ide"); folyamatsav.setMinimum(); folyamatsav.setMaximum(100); folyamatsav.setValue(20);

Page 72: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

Last update:2015/10/29 19:41 oktatas:programozás:java:java_gui_swing http://szit.hu/doku.php?id=oktatas:programoz%C3%A1s:java:java_gui_swing

http://szit.hu/ Printed on 2015/10/31 01:12

folyamatsav.setBounds(50, 50, 200, 30); folyamatsav.setStringPainted(true); gomb.setBounds(100, 100, 100, 30); gomb.addActionListener(new Gomb_Click()); add(folyamatsav); add(gomb); setLayout(null); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(400, 300); setVisible(true); } class Gomb_Click implements ActionListener { public void actionPerformed(ActionEvent e) { int a = folyamatsav.getValue(); a++; folyamatsav.setValue(a); folyamatsav.setString(a + " %"); } } public static void main(String[] argv) { new Program(); }}

JTree

Faszerkezet.

Program.java

import javax.swing.*; class Program extends JFrame{ JTree fa; Program() { fa = new JTree(); add(fa); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(800, 600); setVisible(true);

Page 73: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

2015/10/31 01:12 73/92 Java GUI Swing csomaggal

SzitWiki - http://szit.hu/

} public static void main(String args[]) { new Program(); }}

JSpinner

Program01.java

import javax.swing.JFrame;import javax.swing.JSpinner;import javax.swing.SpinnerModel;import javax.swing.SpinnerNumberModel;import java.awt.FlowLayout;import java.awt.Dimension; class Program01 extends JFrame{ SpinnerModel spinmodel; JSpinner lepteto; Program01() { int min = 2; int max = 15; int leptek = 1; int kezdoErtek = 9; spinmodel = new SpinnerNumberModel(kezdoErtek, min, max,leptek); lepteto = new JSpinner(spinmodel); Dimension d = lepteto.getPreferredSize(); d.width = 50; lepteto.setPreferredSize(d); setLayout(new FlowLayout()); add(lepteto); setSize(400, 300); setVisible(true); } public static void main(String args[]) { new Program01(); }}

Szintaxis:

Page 74: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

Last update:2015/10/29 19:41 oktatas:programozás:java:java_gui_swing http://szit.hu/doku.php?id=oktatas:programoz%C3%A1s:java:java_gui_swing

http://szit.hu/ Printed on 2015/10/31 01:12

SpinnerNumberModel(double value, double minimum, double maximum, doublestepSize)

SpinnerNumberModel(int value, int minimum, int maximum, int stepSize)

A változás figyelése:

delaySpinner.addChangeListener(new ChangeListener(){ public void stateChanged(ChangeEvent e) { int szam = (Integer)delaySpinner.getModel().getValue(); }});

Ablakállapotok

Program.java

import javax.swing.JFrame;import java.awt.Frame;class Program extends JFrame{ Program() throws InterruptedException { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(400, 300); setVisible(true); // Várunk 5 másodpercet Thread.sleep (5000); setState ( JFrame.ICONIFIED ); // Várunk 5 másodpercet Thread.sleep (5000); setState ( JFrame.NORMAL ); // Várunk 5 másodpecet Thread.sleep (5000); setVisible (false); dispose(); // Kilépünk System.exit(); } public static void main(String args[]) throws InterruptedException {

Page 75: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

2015/10/31 01:12 75/92 Java GUI Swing csomaggal

SzitWiki - http://szit.hu/

new Program(); }}

Elrendezéskezelés

Az elrendezéskezelésről

A setLayout() metódussal állítjuk. A JPanel komponens használata esetén a konstruktorban ismegadható az elrendezéskezelő.

Elrendezéskezelő osztályok:

java.awt.BorderLayoutjavax.swing.BoxLayoutjava.awt.CardLayoutjava.awt.FlowLayoutjava.awt.GridBagLayoutjava.awt.GridLayoutjava.swing.GroupLayoutjavax.swing.SprintLayout

javax.swing.BoxLayout

Program01.java

import javax.swing.JFrame;import javax.swing.JButton;import javax.swing.BoxLayout;import javax.swing.JPanel; class Program01 extends JFrame{ JButton gomb1 = new JButton("Első"); JButton gomb2 = new JButton("Második"); JButton gomb3 = new JButton("Harmadik"); Program01() { //PAGE_AXIS, X_AXIS, Y_AXIS, LINE_AXIS setLayout(new BoxLayout(getContentPane(), BoxLayout.LINE_AXIS)); add(gomb1); add(gomb2); add(gomb3);

Page 76: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

Last update:2015/10/29 19:41 oktatas:programozás:java:java_gui_swing http://szit.hu/doku.php?id=oktatas:programoz%C3%A1s:java:java_gui_swing

http://szit.hu/ Printed on 2015/10/31 01:12

pack(); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); } public static void main(String[] args) { new Program01(); }}

JPanel használatával:

Program01.java

import javax.swing.JFrame;import javax.swing.JButton;import javax.swing.BoxLayout;import javax.swing.JPanel; class Program01 extends JFrame{ JButton gomb1 = new JButton("Első"); JButton gomb2 = new JButton("Második"); JButton gomb3 = new JButton("Harmadik"); JPanel panel = new JPanel(); Program01() { //PAGE_AXIS, X_AXIS, Y_AXIS, LINE_AXIS panel.setLayout(new BoxLayout(panel, BoxLayout.LINE_AXIS) ); panel.add(gomb1); panel.add(gomb2); panel.add(gomb3); add(panel); pack(); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); } public static void main(String[] args) { new Program01(); }}

Page 77: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

2015/10/31 01:12 77/92 Java GUI Swing csomaggal

SzitWiki - http://szit.hu/

GridBagLayout

import java.awt.GridBagLayout;import java.awt.GridBagConstraints;

JPanel pane = new JPanel(new GridBagLayout());GridBagConstraints c = new GridBagConstraints(); panel1.add(aKomponens, c);

Minden komponenshez adhatunk saját GridBagConstraints objektumot, de ugyanazt is beállíthatjuk.

A GridBagConstraints a következő változókat tartalmazza:

gridx, gridy

Sorok és oszlopok megadása.

Az első mező címe: gridx=0 Az első sor címe: gridy=0

Az alapértelmezett: GridBagConstraints.RELATIVE

gridwidth, gridheight

Az oszlopok és sorok szélessége és magassága.

A előtt lévő sorral egyezen meg: GridBagConstraints.REMAINDERGridBagConstraints.RELATIVE

fill

Kitölti a rendelkezésre álló helyet vízszintesen vagy függőlegesen.

GridBagConstraints.VERTICALGridBagConstraints.HORIZONTAL

ipadx, ipady

Belső térköz.

insets

Külső térköz

Page 78: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

Last update:2015/10/29 19:41 oktatas:programozás:java:java_gui_swing http://szit.hu/doku.php?id=oktatas:programoz%C3%A1s:java:java_gui_swing

http://szit.hu/ Printed on 2015/10/31 01:12

anchor

Akkor használjuk ha komponens kisebb mint a rendelkezésére álló hely.

A következő konstansok használhatók:

GridBagConstraints.CENTER (alapértelmezés)PAGE_STARTPAGE_ENDLINE_STARTLINE_ENDFIRST_LINE_STARTFIRST_LINE_ENDLAST_LINE_ENDLAST_LINE_START

weightx, weighty

Vastagság

0.0 (alapértelmezett)1.0

További információk

http://docs.oracle.com/javase/tutorial/uiswing/layout/gridbag.html

BorderLayout

import java.awt.BorderLayout;

pane.add(button, BorderLayout.LINE_END);

BorderLayout:

button = new JButton("Button 3 (LINE_START)");pane.add(button, BorderLayout.LINE_START);

PAGE_STARTPAGE_ENDLINE_STARTLINE_ENDCENTER

http://docs.oracle.com/javase/tutorial/uiswing/layout/border.html (BorderLayout)

Page 79: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

2015/10/31 01:12 79/92 Java GUI Swing csomaggal

SzitWiki - http://szit.hu/

GridLayout

import java.awt.GridLayout;

Az első mindig a sor, a második paraméter mindig az oszlopok száma:

panel.setLayout(new GridLayout(1,)); panel.add(gomb1);panel.add(gomb2);

4 sor és 3 oszlopos példa:

Program01.java

import javax.swing.JFrame;import javax.swing.JButton;import java.awt.GridLayout; class Program01 extends JFrame{ JButton[] buttons; Program01() { buttons = new JButton[12]; for(int i=; i<12; i++) { buttons[i] = new JButton(); buttons[i].setText(Integer.toString(i)); add(buttons[i]); } setLayout(new GridLayout(4, 3)); pack(); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); } public static void main(String[] args) { new Program01(); }}

De panelon is használhatjuk a GridLayout elrendezéskezelőt:

Program01.java

import javax.swing.JFrame;

Page 80: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

Last update:2015/10/29 19:41 oktatas:programozás:java:java_gui_swing http://szit.hu/doku.php?id=oktatas:programoz%C3%A1s:java:java_gui_swing

http://szit.hu/ Printed on 2015/10/31 01:12

import javax.swing.JButton;import javax.swing.JPanel;import javax.swing.JTextField;import java.awt.GridLayout;import javax.swing.BoxLayout; class Program01 extends JFrame{ JButton[] buttons; JPanel buttonsPanel; JTextField displayTextField; Program01() { buttonsPanel = new JPanel(); displayTextField = new JTextField(); buttons = new JButton[12]; for(int i=; i<12; i++) { buttons[i] = new JButton(); buttons[i].setText(Integer.toString(i)); buttonsPanel.add(buttons[i]); } buttonsPanel.setLayout(new GridLayout(4, 3)); setLayout(new BoxLayout(getContentPane(), BoxLayout.Y_AXIS)); add(displayTextField); add(buttonsPanel); pack(); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); } public static void main(String[] args) { new Program01(); }}

TrayIcon

Program01.java

import javax.swing.JFrame;import javax.swing.JButton;import java.awt.event.ActionListener;import java.awt.event.ActionEvent;

Page 81: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

2015/10/31 01:12 81/92 Java GUI Swing csomaggal

SzitWiki - http://szit.hu/

import java.awt.SystemTray;import java.awt.TrayIcon;import java.awt.AWTException;import javax.swing.ImageIcon;import javax.swing.JMenuItem;import javax.swing.JPopupMenu;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import javax.swing.JOptionPane; class Program01 extends JFrame{ JButton button1 = new JButton("Kilépés"); ImageIcon img = newImageIcon(this.getClass().getClassLoader().getResource("ikon.png")); JPopupMenu jpopup = new JPopupMenu(); Program01() { JMenuItem exampleMenuItem = new JMenuItem("Példa", newImageIcon("ikon24x24.png")); JMenuItem exitMenuItem = new JMenuItem("Kilépés"); exitMenuItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.exit(); } }); exampleMenuItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(getContentPane(),"Példa"); } }); jpopup.add(exampleMenuItem); jpopup.addSeparator(); jpopup.add(exitMenuItem); TrayIcon trayIcon = new TrayIcon(img.getImage()); trayIcon.setImageAutoSize(true); trayIcon.addMouseListener(new MouseAdapter() { public void mouseReleased(MouseEvent e) { jpopup.setLocation(e.getX(), e.getY());

Page 82: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

Last update:2015/10/29 19:41 oktatas:programozás:java:java_gui_swing http://szit.hu/doku.php?id=oktatas:programoz%C3%A1s:java:java_gui_swing

http://szit.hu/ Printed on 2015/10/31 01:12

jpopup.setInvoker(jpopup); jpopup.setVisible(true); } }); SystemTray sysTray = SystemTray.getSystemTray(); try { sysTray.add(trayIcon); } catch(AWTException e) { e.printStackTrace(); System.err.println("Rendszer tray ikon"); } button1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.exit(); } }); add(button1); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); pack(); setVisible(true); } public static void main(String args[]) { new Program01(); }}

http://docs.oracle.com/javase/tutorial/uiswing/misc/systemtray.html

Függelék

Füles ablak példa

Négypaneles példa, státuszbárral:

Program01.java

Page 83: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

2015/10/31 01:12 83/92 Java GUI Swing csomaggal

SzitWiki - http://szit.hu/

import javax.swing.JFrame;import javax.swing.JTabbedPane;import javax.swing.JPanel;import javax.swing.JLabel;import java.awt.BorderLayout;import javax.swing.JMenuBar;import javax.swing.JMenu;import javax.swing.JMenuItem;import java.awt.event.ActionListener;import java.awt.event.ActionEvent;import java.awt.Dimension; class Program01 extends JFrame implements ActionListener{ private JTabbedPane tabbedPane; private JPanel firstPanel; private JPanel secondPanel; private JPanel thirdPanel; private JPanel fourthPanel; private JMenuBar menuBar; private JMenuItem exitMenuItem; private StatusBar statusBar; public Program01() { setLayout( new BorderLayout() ); menuBar = new JMenuBar(); menuCreate(); statusBar = new StatusBar(); getContentPane().add(statusBar, java.awt.BorderLayout.SOUTH); firstPanelCreate(); secondPanelCreate(); thirdPanelCreate(); fourthPanelCreate(); tabbedPane = new JTabbedPane(); tabbedPane.addTab("Első", firstPanel); tabbedPane.addTab("Második", secondPanel); tabbedPane.addTab("Harmadik", thirdPanel); tabbedPane.addTab("Negyedik", fourthPanel); add(tabbedPane); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(800, 600); setVisible(true); }

Page 84: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

Last update:2015/10/29 19:41 oktatas:programozás:java:java_gui_swing http://szit.hu/doku.php?id=oktatas:programoz%C3%A1s:java:java_gui_swing

http://szit.hu/ Printed on 2015/10/31 01:12

void firstPanelCreate() { firstPanel = new JPanel(); firstPanel.setLayout( null ); JLabel cimke1 = new JLabel( "Első panel felirata" ); cimke1.setBounds( 10, 15, 150, 20 ); firstPanel.add( cimke1 ); } void secondPanelCreate() { secondPanel = new JPanel(); secondPanel.setLayout( null ); JLabel cimke1 = new JLabel( "Második panel felirata" ); cimke1.setBounds( 10, 15, 150, 20 ); secondPanel.add( cimke1 ); } void thirdPanelCreate() { thirdPanel = new JPanel(); thirdPanel.setLayout( null ); JLabel cimke1 = new JLabel( "Harmadik panel felirata" ); cimke1.setBounds( 10, 15, 150, 20 ); thirdPanel.add( cimke1 ); } void fourthPanelCreate() { fourthPanel = new JPanel(); fourthPanel.setLayout( null ); JLabel cimke1 = new JLabel( "Harmadik panel felirata" ); cimke1.setBounds( 10, 15, 150, 20 ); fourthPanel.add( cimke1 ); } void menuCreate() { JMenu filemenu; filemenu = new JMenu("Fájl"); exitMenuItem = new JMenuItem("Kilépés"); exitMenuItem.addActionListener(this); setJMenuBar(menuBar); menuBar.add(filemenu); filemenu.add(exitMenuItem); } public void actionPerformed(ActionEvent e) { if(e.getSource() == exitMenuItem) System.exit(); }

Page 85: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

2015/10/31 01:12 85/92 Java GUI Swing csomaggal

SzitWiki - http://szit.hu/

public static void main(String args[]) { new Program01(); } public class StatusBar extends JLabel { public StatusBar() { super(); super.setPreferredSize(new Dimension(100, 16)); setMessage("Készen van"); } public void setMessage(String message) { setText(" "+message); } }}

JToolBar

Program01.java

import javax.swing.JFrame;import javax.swing.JToolBar;import java.awt.BorderLayout;import javax.swing.JButton; class Program01 extends JFrame{ JToolBar toolBar = new JToolBar("Valami szöveg"); Program01() { JButton button = new JButton("Felirat"); button.setToolTipText("Szöveg"); toolBar.add(button); //~ add(toolBar, BorderLayout.PAGE_START); add(toolBar, BorderLayout.NORTH); setSize(800, 600); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); } public static void main(String[] args)

Page 86: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

Last update:2015/10/29 19:41 oktatas:programozás:java:java_gui_swing http://szit.hu/doku.php?id=oktatas:programoz%C3%A1s:java:java_gui_swing

http://szit.hu/ Printed on 2015/10/31 01:12

{ new Program01(); }}

Esetleg:

public class myToolbar extends JToolBar{ public myToolbar() { setName("Eszköztár"); setBackground(new Color(245, 245, 245)); setOrientation(1); setBorderPainted(false); setFloatable(true); setOpaque(true); }}

Szeparátor

System.getProperty("line.separator")

NetBeans stílus

Program01.java

import javax.swing.JFrame;import javax.swing.JButton;import java.awt.event.ActionListener;import java.awt.event.ActionEvent; class Program01 extends JFrame{ private JButton gomb; Program01() { gomb = new JButton(); gomb.setText("Klikkelj ide"); gomb.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { GombActionPerformed(e);

Page 87: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

2015/10/31 01:12 87/92 Java GUI Swing csomaggal

SzitWiki - http://szit.hu/

} }); add(gomb); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); pack(); } private void GombActionPerformed(ActionEvent e) { } public static void main(String[] args) { try { for (javax.swing.UIManager.LookAndFeelInfo info :javax.swing.UIManager.getInstalledLookAndFeels()) { if ("Nimbus".equals(info.getName())) {javax.swing.UIManager.setLookAndFeel(info.getClassName()); break; } } } catch (ClassNotFoundException ex) {java.util.logging.Logger.getLogger(Program01.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (InstantiationException ex) {java.util.logging.Logger.getLogger(Program01.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (IllegalAccessException ex) {java.util.logging.Logger.getLogger(Program01.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (javax.swing.UnsupportedLookAndFeelException ex) {java.util.logging.Logger.getLogger(Program01.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } new Program01().setVisible(true); }}

Page 88: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

Last update:2015/10/29 19:41 oktatas:programozás:java:java_gui_swing http://szit.hu/doku.php?id=oktatas:programoz%C3%A1s:java:java_gui_swing

http://szit.hu/ Printed on 2015/10/31 01:12

Swing szállak

Ha elindítunk egy Swing programot, akkor az összes tevékenység az EDT-ben fut. Az EDT az EventDispatching Thread szavak betűiből rövidítés. Ezért, ha kiteszünk egy JButton, amely egy időigényesprogramot futtat, a programunk várva a feladat befejezését, megmerevedik.

Ezért szoktuk használni a SwingUtilities osztályt. Ebben az osztályban az invokeLater() metódusbólindítjuk a programunkat, amely segítségével orvosolható a fenti probléma.

import javax.swing.SwingUtilities; ... public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { new Program01(); } }); }

A probléma orvosolható persze úgy is, hogy létrehozok egy újabb szálat, és abból futtatom azidőigényes tevékenységet. Ha két szálból azonban egyidejűleg nyúlunk egy Swing komponenshez,akkor megint problémáink lehetnek a invokeLater() nélkül.

Az invokeLater() tetszőleges worker szálból hívható, amely az EDT várólistájára helyezi a kívánttevékenységet.

Időzítő

javax.swing.Timer

A konstruktor:

Timer(int varakozas, ActionListener figyelo)

varakozas - milliszekundum a kezdés és az első esemény közöttfigyelo - előkísztő figyelő (pl. ActionListener), de lehet null is

http://docs.oracle.com/javase/tutorial/uiswing/misc/timer.htmlhttp://docs.oracle.com/javase/6/docs/api/javax/swing/Timer.html

javax.swing.Timer timer = new javax.swing.Timer(induloVarakozas, this);timer.setInitialDelay(varakozas);

Page 89: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

2015/10/31 01:12 89/92 Java GUI Swing csomaggal

SzitWiki - http://szit.hu/

timer.start();

Ablakállapotok kezelése

Az ablak bezárása előtt mentés:

Program01.java

import javax.swing.JFrame;import java.awt.event.WindowStateListener;import java.awt.event.WindowEvent;class Program01 extends JFrame{ Program01() { addWindowStateListener(new WindowStateListener() { public void windowStateChanged(WindowEvent e) { windowStateListener(e); } }); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(800, 600); setVisible(true); } private void windowStateListener(WindowEvent e) { if(e.getNewState()==WindowEvent.WINDOW_CLOSED) { //ide jön a mentés } } public static void main(String[] args) { new Program01(); }}

JLayeredPane

A JLayeredPane lehetővé teszi rétegek kezelését. A rétegkezelést Z index, vagy sorrendnek is hívjuk.

A következő példában nyomógombokat helyeztünk egymás felé:

import javax.swing.JLayeredPane;

Page 90: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

Last update:2015/10/29 19:41 oktatas:programozás:java:java_gui_swing http://szit.hu/doku.php?id=oktatas:programoz%C3%A1s:java:java_gui_swing

http://szit.hu/ Printed on 2015/10/31 01:12

...class RetegesPanel extends JLayeredPane { public RetegesPanel(){ setComponentZOrder(button1, 1); setComponentZOrder(button2, 1); setComponentZOrder(button3, ); }}

Ha az egyik gomb felé viszem az egeret, akkor az a gomb felülre kerül.

Ha szeretnénk mindig az adott Z sorrendben látni a gombokat, akkor használjuk a setLayer()metódust:

import javax.swing.JLayeredPane;...class RetegesPanel extends JLayeredPane { public RetegesPanel(){ setLayer(button1, ); setLayer(button2, ); setLayer(button3, 1); }}

Így, ha az egeret egy gomb felé viszem, az adott rétegben marad.

Az ide vonatkozó hivatalos dokumentáció

Fókusz

Az ablakos program esetén mindig van egy ablakunk, amelyet frame-nek is szoktunk nevezni. Azablakon komponenseket helyezünk el, amelyek közül egy mindig fókuszban van. A fókusz alatt értjük,hogy aktívvá válik, kissé megváltozik a színezete, stb. Mindig a fókuszban lévő komponensen tudunkegy billentyűnyomást figyelni.

Ha azt szeretnénk, hogy mindig figyeljünk bizonyos billentyűket, akkor a fókuszt tegyük mindig visszaaz ablakra:

this.requestFocus();

Néha szeretnénk a fókuszt tiltani, vagy éppen újra engedélyezni. A Component osztály rendelkezikegy setFocusable() metódussal. Szintaktikája:

setFocusable(boolean focusable)

Segítségével a Component osztály vagy azok leszármazott osztályaiból példányosított objektumoknakbeállítható a fókusz engedélyezése vagy tiltása.

Az ablakkeretre tehető komponensek (JButton, JTextField, stb) őse között szerepel a Component

Page 91: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

2015/10/31 01:12 91/92 Java GUI Swing csomaggal

SzitWiki - http://szit.hu/

osztály, ezért mindegyiknél használható a metódus.

button1.setFocusable(false);

jDesktopPane

A jDesktopPane segítségével virtuális asztal létrehozása lehetséges. A virtuális asztalra jInternalFrameablakok helyezhetők. Az ablakoknak beállítható az átméretezhetőség, ikonállapotba helyezhetőség,maximalizálás stb.

https://docs.oracle.com/javase/tutorial/uiswing/components/internalframe.html

Használható Swing csomagok

javax.swing.plafjavax.swing.textjavax.swingjavax.swing.plaf.basicjavax.swing.text.htmljavax.swing.borderjavax.swing.plaf.metaljavax.swing.text.html.parserjavax.swing.colorchooserjavax.swing.plaf.multijavax.swing.text.rtfjavax.swing.eventjavax.swing.plaf.synthjavax.swing.treejavax.swing.filechooserjavax.swing.tablejavax.swing.undo

Legfelső szintű konténerek:

JFrameJDialogJApplet

A csomagok közül mi elsőnek javax.swing-et használjuk. A konténerek közül pedig a JFramekonténert, amely egy ablakot hoz létre a képernyőn. A következő programokban ezek használatátlátjuk.

Külső link

http://docs.oracle.com/javase/tutorial/uiswing/http://docs.oracle.com/javase/tutorial/uiswing/TOC.htmlhttp://docs.oracle.com/javase/tutorial/uiswing/components/icon.html (Ikon)

Page 92: Java GUI Swing csomaggal - szerencsiszakkepzo.sulinet.huszerencsiszakkepzo.sulinet.hu/jegyzet/info/java_gui_swing... · 2015/10/31 01:12 3/92 Java GUI Swing csomaggal SzitWiki - public

Last update:2015/10/29 19:41 oktatas:programozás:java:java_gui_swing http://szit.hu/doku.php?id=oktatas:programoz%C3%A1s:java:java_gui_swing

http://szit.hu/ Printed on 2015/10/31 01:12

http://docs.oracle.com/javase/tutorial/uiswing/components/frame.html (Frame létrehozása)http://docs.oracle.com/javase/tutorial/ui/index.htmlhttp://docs.oracle.com/javase/tutorial/uiswing/components/index.htmlhttp://docs.oracle.com/javase/tutorial/2d/TOC.html (2D)http://docs.oracle.com/javase/tutorial/2d/printing/index.html (Nyomtatás)

http://www.javabeginner.com (Igen jó tutorial!)http://www.javabeginner.com/java-swing/java-swing-tutorialhttp://www.cs.cf.ac.uk/Dave/HCI/HCI_Handout_CALLER/HCI_Handout_CALLER.htmlhttp://academicjava.com/JavaTutorial/JTabbedPaneExample.htmlhttp://www.apl.jhu.edu/~hall/java/Swing-Tutorial/Swing-Tutorial-JList.html (JList)http://movingtofreedom.org/2007/11/11/displaying-a-scaled-image-in-java/ (Skálázható kép)http://www.apl.jhu.edu/~hall/java/Swing-Tutorial/Swing-Tutorial-JButton.html (Gombon kép)http://home.cogeco.ca/~ve3ll/jatutorg.htm (Grafika)http://mindprod.com/jgloss/image.html (Minden ami kép)http://download.oracle.com/javase/tutorial/uiswing/components/list.html (JList)http://download.oracle.com/javase/tutorial/uiswing/components/toplevel.htmlhttp://www.apl.jhu.edu/~hall/java/Java2D-Tutorial.htmlhttp://www.apl.jhu.edu/~hall/java/Swing-Tutorial/

http://php.scripts.psu.edu/djh300/cmpsc221/notes-graphics-intro.phphttp://zetcode.com/gfx/java2d/http://oreilly.com/catalog/java2d/chapter/ch04.html

From:http://szit.hu/ - SzitWiki

Permanent link:http://szit.hu/doku.php?id=oktatas:programoz%C3%A1s:java:java_gui_swing

Last update: 2015/10/29 19:41