oktatas:programozas:java:java_gui_swing
Különbségek
A kiválasztott változat és az aktuális verzió közötti különbségek a következők.
Előző változat mindkét oldalonElőző változatKövetkező változat | Előző változat | ||
oktatas:programozas:java:java_gui_swing [2021/03/03 13:31] – [Felirat] admin | oktatas:programozas:java:java_gui_swing [2024/04/16 18:46] (aktuális) – [Külső link] admin | ||
---|---|---|---|
Sor 4: | Sor 4: | ||
* **Szerző: | * **Szerző: | ||
- | * Copyright (c) Sallai András, 2011, 2012, 2013, 2014, 2015, 2016, 2019, 2020 | + | * Copyright (c) 2011, Sallai András |
- | * Licenc: | + | * Szerkesztve: |
- | * Web: http://szit.hu | + | * Licenc: |
+ | * Web: https://szit.hu | ||
===== Bevezetés ===== | ===== Bevezetés ===== | ||
- | Ennek a fejezetnek a megvalósításához feltételezem | + | A fejezet feldolgozásához szükség van a Java nyelv, |
- | objektumorientált programozási ismereteket. | + | |
- | Joggal kérdezhetjük, | + | A Java nyelvbe épített első GUI programozói könyvtár |
- | 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 | + | 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 | 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, | + | ugyanaz a program másként néz ki Windowson, Linuxon, |
eszközkészletet úgy alakították ki, hogy maga határozza meg hogyan nézzen ki a program ablaka. | 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. | Így egységes kinézetet kapunk minden operációs rendszeren. | ||
Sor 48: | Sor 47: | ||
+ | {{: | ||
+ | Alapértelmezetten, | ||
+ | bezárásra, | ||
+ | a terminálablakba kattintva tudjuk leállítani, | ||
Sor 60: | Sor 62: | ||
import javax.swing.JFrame; | import javax.swing.JFrame; | ||
</ | </ | ||
+ | A JFrame a javax.swing csomagban található, | ||
+ | útvonalat adtuk meg. | ||
- | A programban egy ablak nevű objektumot deklarálunk: | + | A programban egy ablak nevű objektumot deklarálunk, aminek a típusa JFrame: |
<code java> | <code java> | ||
JFrame ablak | JFrame ablak | ||
Sor 71: | Sor 75: | ||
new JFrame(); | new JFrame(); | ||
</ | </ | ||
+ | A JFrame() konstruktort hívjuk paraméterek nélkül. | ||
Sor 93: | Sor 98: | ||
+ | Ha futtatjuk a programot, az ablak bezárása után, ne felejtsük | ||
+ | el a programot is leállítani Ctrl+C billentyűkombinációval a | ||
+ | terminálablakban. | ||
==== Második program ==== | ==== Második program ==== | ||
A második programunk eredménye mindenben megegyezik az előzővel, | A második programunk eredménye mindenben megegyezik az előzővel, | ||
viszont másként valósítottuk meg. Kihasználjuk a Java objektum | viszont másként valósítottuk meg. Kihasználjuk a Java objektum | ||
- | orientált | + | orientált |
<code java Program.java> | <code java Program.java> | ||
Sor 107: | Sor 114: | ||
Program() | Program() | ||
{ | { | ||
- | setSize(400, | + | this.setSize(400, |
- | setVisible(true); | + | this.setVisible(true); |
} | } | ||
Sor 123: | Sor 130: | ||
- | Ugyanez NetBeans rendszerben: | ||
- | <code java 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, | ||
- | 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 NetBeans forrásprogramjában | ||
- | van a forráskód elején egy package program; nevű sor. | ||
==== A második program elemzése ==== | ==== A második program elemzése ==== | ||
Sor 174: | Sor 145: | ||
Program() | Program() | ||
{ | { | ||
- | setSize(400, | + | this.setSize(400, |
- | setVisible(true); | + | this.setVisible(true); |
} | } | ||
</ | </ | ||
Sor 187: | Sor 158: | ||
<code java> | <code java> | ||
- | setSize(400, | + | this.setSize(400, |
- | setVisible(true); | + | this.setVisible(true); |
</ | </ | ||
Sor 195: | Sor 166: | ||
<code java> | <code java> | ||
new Program(); | new Program(); | ||
+ | </ | ||
+ | |||
+ | ==== Ablakbezárás esemény ==== | ||
+ | |||
+ | A grafikus programok eseményvezéreltek. A program folyamatosan fut, és | ||
+ | események bekövetkezését várja. Ilyen események az egérkattintás és a | ||
+ | billentyűzetnyomás, | ||
+ | stb. Egy normál alkalmazás ablak címsorában van egy bezárás gomb, általában | ||
+ | valamilyen " | ||
+ | A bezárás gombra kattintva kiváltódik az úgynevezett " | ||
+ | Ez az ablak elrejtését jelenti, de nem a program befejezését, | ||
+ | bár általában a főablak elrejtésével együtt a program befejezését is | ||
+ | szeretnénk. | ||
+ | |||
+ | A következő programban egy alapértelmezett kezelőt adunk az ablakhoz, amely | ||
+ | megvalósítja a program befejezését, | ||
+ | |||
+ | Az ablak bezárás eseményt vezérelhetjük a setDefaultCloseOperation() metódussal. | ||
+ | Általában azt szeretnénk, | ||
+ | fejeződjön be. Ehhez hívjuk a setDefaultCloseOperation() metódust a | ||
+ | JFrame.EXIT_ON_CLOSE állandóval: | ||
+ | |||
+ | <code java> | ||
+ | this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); | ||
+ | </ | ||
+ | |||
+ | Az állandó több osztályból is beállítható: | ||
+ | * JFrame | ||
+ | * JInternalPane | ||
+ | * JDialog | ||
+ | |||
+ | Minden osztályban négy lehetőség állítható be: | ||
+ | |||
+ | |||
+ | * DO_NOTHING_ON_CLOSE | ||
+ | * Nem csinál semmit ablak bezárásra kattintva. A WindowsListener segítségével más hatá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, | ||
+ | |||
+ | |||
+ | <code java Program.java> | ||
+ | import javax.swing.JFrame; | ||
+ | class Program extends JFrame | ||
+ | { | ||
+ | Program() | ||
+ | { | ||
+ | this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); | ||
+ | this.setSize(400, | ||
+ | this.setVisible(true); | ||
+ | } | ||
+ | public static void main(String args[]) | ||
+ | { | ||
+ | new Program(); | ||
+ | } | ||
+ | } | ||
</ | </ | ||
Sor 201: | Sor 231: | ||
A következő programunk ablakára egy feliratot fogunk elhelyezni, amit a JLabel osztállyal valósítunk meg. | A következő programunk ablakára egy feliratot fogunk elhelyezni, amit a JLabel osztállyal valósítunk meg. | ||
+ | |||
+ | Alapértelmezett magassága: 15 | ||
+ | |||
<code java Program.java> | <code java Program.java> | ||
import javax.swing.JFrame; | import javax.swing.JFrame; | ||
import javax.swing.JLabel; | import javax.swing.JLabel; | ||
+ | |||
class Program extends JFrame | class Program extends JFrame | ||
{ | { | ||
- | JLabel | + | JLabel |
Program() | Program() | ||
{ | { | ||
- | felirat | + | this.label1 |
- | add(felirat); | + | this.add(this.label1); |
- | setSize(400, | + | this.setSize(400, |
- | setVisible(true); | + | this.setVisible(true); |
} | } | ||
public static void main(String args[]) | public static void main(String args[]) | ||
Sor 230: | Sor 264: | ||
Az ablakhoz hozzáadtuk a felirat nevű objektumot: | Az ablakhoz hozzáadtuk a felirat nevű objektumot: | ||
<code java> | <code java> | ||
- | add(felirat); | + | this.add(this.label1); |
</ | </ | ||
Sor 239: | Sor 273: | ||
import javax.swing.JLabel | import javax.swing.JLabel | ||
- | A felírat | + | {{: |
+ | |||
+ | |||
+ | A felirat | ||
<code java> | <code java> | ||
- | label1.setText(" | + | this.label1.setText(" |
</ | </ | ||
Sor 248: | Sor 285: | ||
Ha a JLabel komponens háttérszínét szeretnénk változtatni, | Ha a JLabel komponens háttérszínét szeretnénk változtatni, | ||
<code java> | <code java> | ||
- | label1.setOpaque(true); | + | this.label1.setOpaque(true); |
- | label1.setBackground(Color.blue); | + | this.label1.setBackground(Color.blue); |
- | label1.setForeground(Color.WHITE); | + | this.label1.setForeground(Color.WHITE); |
</ | </ | ||
Sor 260: | Sor 297: | ||
... | ... | ||
//RIGHT, LEFT, CENTER | //RIGHT, LEFT, CENTER | ||
- | label1.setHorizontalAlignment(SwingConstants.CENTER); | + | this.label1.setHorizontalAlignment(SwingConstants.CENTER); |
//TOP, BOTTOM, CENTER | //TOP, BOTTOM, CENTER | ||
- | label1.setVerticalAlignment(SwingConstants.TOP); | + | this.label1.setVerticalAlignment(SwingConstants.TOP); |
</ | </ | ||
+ | |||
+ | |||
+ | Szegély, font, szín: | ||
+ | <code java> | ||
+ | this.label1 = new JLabel(" | ||
+ | Border border = new EmptyBorder(10, | ||
+ | this.label1.setBorder(border); | ||
+ | this.label1.setFont(new Font(" | ||
+ | this.label1.setForeground(Color.blue); | ||
+ | </ | ||
+ | |||
==== Ablak automatikus méretezése ==== | ==== Ablak automatikus méretezése ==== | ||
Sor 270: | Sor 318: | ||
import javax.swing.JFrame; | import javax.swing.JFrame; | ||
import javax.swing.JLabel; | import javax.swing.JLabel; | ||
+ | |||
class Program extends JFrame | class Program extends JFrame | ||
{ | { | ||
- | JLabel | + | JLabel |
Program() | Program() | ||
{ | { | ||
- | felirat | + | this.label1 |
- | add(felirat); | + | this.add(this.label1); |
- | pack(); | + | this.pack(); |
- | setVisible(true); | + | this.setVisible(true); |
} | } | ||
public static void main(String args[]) | public static void main(String args[]) | ||
Sor 326: | Sor 375: | ||
- | |||
- | |||
- | ===== Ablakbezárás esemény kezelése ===== | ||
- | ==== DefaultCloseOperation() ==== | ||
- | |||
- | |||
- | A grafikus programok eseményvezéreltek. A program folyamatosan fut, és | ||
- | események bekövetkezését várja. Ilyen események az egérkattintás és a | ||
- | billentyűzetnyomás, | ||
- | stb. Egy normál alkalmazás ablak címsorában van egy bezárás gomb " | ||
- | minimalizálás és egy maximalizálás gomb. A bezárás gombra kattintva kiváltódik | ||
- | az úgynevezett " | ||
- | |||
- | Biztosan észrevettük, | ||
- | az " | ||
- | A következő programban egy alapértelmezett kezelőt adunk az ablakhoz, amely | ||
- | megvalósítja a program befejezését, | ||
- | |||
- | |||
- | <code java Program.java> | ||
- | import javax.swing.JFrame; | ||
- | import javax.swing.JLabel; | ||
- | class Program extends JFrame | ||
- | { | ||
- | JLabel felirat; | ||
- | Program() | ||
- | { | ||
- | felirat = new JLabel(" | ||
- | 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: | ||
- | <code java> | ||
- | 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 a számállandót adjuk meg a setDefaultClsoeOperation() | ||
- | metódus paramétereként, | ||
- | |||
- | |||
- | ==== Ablakbezárás esemény ==== | ||
- | |||
- | |||
- | |||
- | |||
- | Alapértelmezetten amikor a felhasználó bezárja az ablakot, az ablak elrejtésre kerül. | ||
- | |||
- | A setDefaultCloseOperation argumentumaként más értékeket is beállíthatunk. | ||
- | |||
- | <code java> | ||
- | ablak.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); | ||
- | </ | ||
- | |||
- | |||
- | Négy érték állítható be JFrame, JInternalPane és JDialog esetén: | ||
- | |||
- | |||
- | * DO_NOTHING_ON_CLOSE | ||
- | * Nem csinál semmit ablak bezárásra kattintva. A WindowsListener segítségével más hatá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, | ||
Sor 674: | Sor 646: | ||
</ | </ | ||
+ | {{: | ||
A FlowLayout() konstruktorral megmondjuk, hogy a komponenseket egymás után sorba helyezzük el. | A FlowLayout() konstruktorral megmondjuk, hogy a komponenseket egymás után sorba helyezzük el. | ||
Sor 683: | Sor 655: | ||
</ | </ | ||
- | Itt szeretném megjegyezni, | + | |
- | az importálásnál megadhatjuk, | + | |
+ | Importálhatjuk | ||
<code java> | <code java> | ||
import java.awt.FlowLayout; | import java.awt.FlowLayout; | ||
Sor 729: | Sor 702: | ||
} | } | ||
</ | </ | ||
+ | |||
+ | {{: | ||
Vegyük észre, hogy az ablak.setLayout() paramétere most már null: | Vegyük észre, hogy az ablak.setLayout() paramétere most már null: | ||
Sor 737: | Sor 712: | ||
A komponenseknél meghatározzuk a setBounds() metódussal a helyüket és méretüket. | A komponenseknél meghatározzuk a setBounds() metódussal a helyüket és méretüket. | ||
<code java> | <code java> | ||
- | cimke1.setBounds(50, | + | felirat1.setBounds(50, |
- | cimke2.setBounds(50, | + | felirat2.setBounds(50, |
</ | </ | ||
- | ===== Gomb (JButton) ===== | + | ===== JButton ===== |
Alapértelmezett magasság: 25 pont | Alapértelmezett magasság: 25 pont | ||
<code java Program01.java> | <code java Program01.java> | ||
- | JButton | + | JButton |
- | gomb.setText(" | + | |
- | gomb.addActionListener(new Gomb_Click()); | + | |
</ | </ | ||
+ | <code java> | ||
+ | JButton button1 = new JButton(" | ||
+ | button1.setText(" | ||
+ | button1.addActionListener(new Button_Click()); | ||
+ | </ | ||
- | A java.awt.Insets osztály használható | + | |
+ | A java.awt.Insets osztály használható | ||
Belső margó: | Belső margó: | ||
nextButton.setMargin(new Insets(10, 10, 10, 10)); | nextButton.setMargin(new Insets(10, 10, 10, 10)); | ||
+ | |||
+ | |||
+ | ==== Kép a gombon ==== | ||
+ | |||
+ | <code java> | ||
+ | button1 = new JButton(new ImageIcon(" | ||
+ | </ | ||
+ | |||
+ | |||
===== Eseménykezelés ===== | ===== Eseménykezelés ===== | ||
==== Eseménykezelés Lambda kifejezéssel ==== | ==== Eseménykezelés Lambda kifejezéssel ==== | ||
Sor 766: | Sor 754: | ||
import javax.swing.JFrame; | import javax.swing.JFrame; | ||
import javax.swing.JButton; | import javax.swing.JButton; | ||
- | class Program01 extends | + | class Program01 extends |
- | JButton closeButton = new JButton(" | + | |
+ | | ||
+ | |||
public Program01() { | public Program01() { | ||
this.closeButton.setBounds(100, | this.closeButton.setBounds(100, | ||
this.closeButton.addActionListener(event -> closeButtonAction()); | this.closeButton.addActionListener(event -> closeButtonAction()); | ||
- | + | ||
this.add(closeButton); | this.add(closeButton); | ||
this.setLayout(null); | this.setLayout(null); | ||
- | this.setSize(800, | ||
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); | this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); | ||
- | this.setCenter(); | + | this.setSize(400, 300); |
this.setVisible(true); | this.setVisible(true); | ||
} | } | ||
Sor 783: | Sor 772: | ||
} | } | ||
public static void main(String[] args) { | public static void main(String[] args) { | ||
- | Program01 prog = new Program01(); | + | new Program01(); |
} | } | ||
} | } | ||
- | |||
</ | </ | ||
Sor 792: | Sor 780: | ||
==== ActionPerformed ==== | ==== ActionPerformed ==== | ||
- | Az események figyeléséhez a Java 8 előtti verziókban az egyik lehetőség | + | Az események figyeléséhez a Java 8 előtti verziókban az egyik lehetőség |
az ActionListener interfész használata. | az ActionListener interfész használata. | ||
Az ActionListener egy actionPerformed() nevű metódust követel meg, | Az ActionListener egy actionPerformed() nevű metódust követel meg, | ||
amiben reagálhatunk a bekövetkezett eseményekre. Az actionPerformed() | amiben reagálhatunk a bekövetkezett eseményekre. Az actionPerformed() | ||
- | metódus | + | metódus |
ActionEvent. Az ActionEvent objektumból lekérdezhető, | ActionEvent. Az ActionEvent objektumból lekérdezhető, | ||
komponens váltotta ki az eseményt. | komponens váltotta ki az eseményt. | ||
Sor 869: | Sor 857: | ||
Szövegdobozt a JTextField osztállyal hozhatunk létre. | Szövegdobozt a JTextField osztállyal hozhatunk létre. | ||
+ | |||
+ | * Alapértelmezett magassága: 19 | ||
+ | * Alapértelmezett szélessége: | ||
+ | |||
+ | |||
A szöveg doboznak kezdőértéket adhatunk a konstruktorban a Text tulajdonsággal. Például: | A szöveg doboznak kezdőértéket adhatunk a konstruktorban a Text tulajdonsággal. Például: | ||
<code java> | <code java> | ||
Sor 911: | Sor 904: | ||
add(duplazasgomb); | add(duplazasgomb); | ||
add(szammezo); | add(szammezo); | ||
- | setLayout(new FlowLayout()); | + | setLayout(new FlowLayout()); |
+ | setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); | ||
pack(); | pack(); | ||
setVisible(true); | setVisible(true); | ||
Sor 940: | Sor 934: | ||
- | Alapértelmezett magasság: 19 pont. | + | {{: |
+ | |||
+ | |||
+ | A JTextField alapértelmezett magassága: 19 pont. | ||
Sor 980: | Sor 978: | ||
import java.awt.FlowLayout; | import java.awt.FlowLayout; | ||
import java.awt.Dimension; | import java.awt.Dimension; | ||
+ | |||
class Program01 extends JFrame | class Program01 extends JFrame | ||
{ | { | ||
- | final static long serialVersionUID = 1; | ||
DefaultListModel< | DefaultListModel< | ||
JList< | JList< | ||
JScrollPane scrollPane1 = new JScrollPane(jlist1); | JScrollPane scrollPane1 = new JScrollPane(jlist1); | ||
- | + | ||
Program01() | Program01() | ||
{ | { | ||
Sor 995: | Sor 992: | ||
listModel.addElement(" | listModel.addElement(" | ||
listModel.addElement(" | listModel.addElement(" | ||
- | + | ||
add(scrollPane1); | add(scrollPane1); | ||
setLayout(new FlowLayout()); | setLayout(new FlowLayout()); | ||
+ | setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); | ||
pack(); | pack(); | ||
setVisible(true); | setVisible(true); | ||
Sor 1007: | Sor 1005: | ||
} | } | ||
</ | </ | ||
+ | |||
+ | |||
+ | {{: | ||
Sor 1284: | Sor 1285: | ||
}); | }); | ||
</ | </ | ||
+ | |||
+ | |||
+ | ===== ComboBox ===== | ||
+ | |||
+ | <code java Program.java> | ||
+ | import javax.swing.*; | ||
+ | |||
+ | class Program extends JFrame | ||
+ | { | ||
+ | JComboBox combo; | ||
+ | Program() | ||
+ | { | ||
+ | combo = new JComboBox(); | ||
+ | |||
+ | combo.setSize(100, | ||
+ | combo.addItem(" | ||
+ | combo.addItem(" | ||
+ | combo.addItem(" | ||
+ | combo.addItem(" | ||
+ | combo.addItem(" | ||
+ | |||
+ | add(combo); | ||
+ | setLayout(null); | ||
+ | setSize(200, | ||
+ | setVisible(true); | ||
+ | } | ||
+ | public static void main(String args[]) | ||
+ | { | ||
+ | new Program(); | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | {{: | ||
+ | |||
+ | A ComboBox alapértelmezett magassága 24 pont. | ||
+ | |||
+ | |||
+ | <code java> | ||
+ | combo.removeAllItem(); | ||
+ | </ | ||
+ | |||
+ | Ha kiválasztott változott: | ||
+ | <code java> | ||
+ | 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: | ||
+ | <code java> | ||
+ | groupComboBox.addItemListener(new ItemListener() | ||
+ | { | ||
+ | public void itemStateChanged(ItemEvent e) | ||
+ | { | ||
+ | if(e.getStateChange()==2) | ||
+ | ; // | ||
+ | } | ||
+ | }); | ||
+ | </ | ||
+ | |||
+ | |||
+ | <code java> | ||
+ | int a = lld.getItemCount(); | ||
+ | int b = lld.getSelectedIndex(); | ||
+ | </ | ||
+ | |||
+ | Adott elem lekérése: | ||
+ | <code java> | ||
+ | if(lld.getItemCount()> | ||
+ | String str = (String) lld.getSelectedItem(); | ||
+ | </ | ||
+ | |||
+ | A getSelectedItem() metódus Object típust ad vissza. | ||
+ | |||
+ | ===== Model használata ===== | ||
+ | |||
+ | <code java Program.java> | ||
+ | import javax.swing.*; | ||
+ | |||
+ | class Program extends JFrame | ||
+ | { | ||
+ | DefaultComboBoxModel comboModel; | ||
+ | JComboBox combo; | ||
+ | Program() | ||
+ | { | ||
+ | comboModel = new JComboBox(); | ||
+ | combo = new JComboBox(comboModel); | ||
+ | combo.setSize(100, | ||
+ | |||
+ | comboModel.addElement(" | ||
+ | comboModel.addElement(" | ||
+ | comboModel.addElement(" | ||
+ | comboModel.addElement(" | ||
+ | comboModel.addElement(" | ||
+ | |||
+ | add(combo); | ||
+ | setLayout(null); | ||
+ | setSize(200, | ||
+ | setVisible(true); | ||
+ | } | ||
+ | public static void main(String args[]) | ||
+ | { | ||
+ | new Program(); | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ==== ComboBox feltöltés ==== | ||
+ | |||
+ | Adott egy lista, benne beosztások: | ||
+ | |||
+ | <code java> | ||
+ | Rank[] rankArray = { | ||
+ | new Rank(1, " | ||
+ | new Rank(2, " | ||
+ | new Rank(3, " | ||
+ | }; | ||
+ | Vector< | ||
+ | </ | ||
+ | |||
+ | Feltöltés: | ||
+ | <code java> | ||
+ | rankList.forEach(rank -> { | ||
+ | comboModel.addElement(rank.name); | ||
+ | }); | ||
+ | </ | ||
+ | |||
+ | A feltöltés egy másik módja: | ||
+ | <code java> | ||
+ | for(Rank rank : rankList) { | ||
+ | comboModel.addElement(rank.name); | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | Teljeskód: | ||
+ | |||
+ | <code java Rank.java> | ||
+ | public class Rank { | ||
+ | int id; | ||
+ | String name; | ||
+ | public Rank(int id, String name) { | ||
+ | this.id = id; | ||
+ | this.name = name; | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | |||
+ | <code java MainFrame.java> | ||
+ | import java.awt.Dimension; | ||
+ | import java.awt.FlowLayout; | ||
+ | import java.util.Arrays; | ||
+ | import java.util.Vector; | ||
+ | |||
+ | import javax.swing.DefaultComboBoxModel; | ||
+ | import javax.swing.JComboBox; | ||
+ | import javax.swing.JFrame; | ||
+ | |||
+ | public class MainFrame extends JFrame { | ||
+ | DefaultComboBoxModel< | ||
+ | JComboBox< | ||
+ | Rank[] rankArray = { | ||
+ | new Rank(1, " | ||
+ | new Rank(2, " | ||
+ | new Rank(3, " | ||
+ | }; | ||
+ | Vector< | ||
+ | |||
+ | public MainFrame() { | ||
+ | setComponent(); | ||
+ | setMainFrame(); | ||
+ | } | ||
+ | private void setComponent() { | ||
+ | comboModel = new DefaultComboBoxModel<> | ||
+ | combo = new JComboBox<> | ||
+ | combo.setPreferredSize(new Dimension(100, | ||
+ | rankList.forEach(rank -> { | ||
+ | comboModel.addElement(rank.name); | ||
+ | }); | ||
+ | } | ||
+ | private void setMainFrame() { | ||
+ | |||
+ | this.add(combo); | ||
+ | this.setLayout(new FlowLayout()); | ||
+ | this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); | ||
+ | this.setSize(400, | ||
+ | this.setVisible(true); | ||
+ | |||
+ | } | ||
+ | | ||
+ | } | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | <code java App.java> | ||
+ | public class App { | ||
+ | public static void main(String[] args) throws Exception { | ||
+ | new MainFrame(); | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ==== Állapot változás eseménye ==== | ||
+ | |||
+ | <code java> | ||
+ | combo.addItemListener(e -> changedStateRankCombo(e)); | ||
+ | </ | ||
+ | |||
+ | A program indulásakor bekövetkezik az új elem kiválasztása. | ||
+ | Ezt követően mindig két esemény következik be. | ||
+ | * előző elem nincs kiválasztva | ||
+ | * új elem kiválasztva | ||
+ | |||
+ | <code java> | ||
+ | private void changedStateRankCombo(ItemEvent event) { | ||
+ | if (event.getStateChange() == ItemEvent.DESELECTED) | ||
+ | System.out.println(" | ||
+ | if (event.getStateChange() == ItemEvent.SELECTED) | ||
+ | System.out.println(" | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Kiválasztott: | ||
+ | <code java> | ||
+ | private void changedStateRankCombo(ItemEvent event) { | ||
+ | if (event.getStateChange() == ItemEvent.SELECTED) { | ||
+ | Object item = event.getItem(); | ||
+ | System.out.println(item); | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ==== Akcióesemény ==== | ||
+ | Használhatjuk az ActionListener-t is, de egyszerre csak egyet használjunk. | ||
+ | |||
+ | <code java> | ||
+ | combo.addActionListener(event -> actionRankCombo(event)); | ||
+ | </ | ||
+ | |||
+ | <code java> | ||
+ | private void actionRankCombo(ActionEvent event) { | ||
+ | System.out.println(" | ||
+ | } | ||
+ | </ | ||
+ | |||
Sor 1299: | Sor 1561: | ||
javax.swing.JOptionPane.showMessageDialog(getContentPane(), | javax.swing.JOptionPane.showMessageDialog(getContentPane(), | ||
</ | </ | ||
+ | |||
+ | |||
+ | {{: | ||
==== Üzenetablakok ==== | ==== Üzenetablakok ==== | ||
Sor 1382: | Sor 1647: | ||
Saját párbeszédablak készítése, | Saját párbeszédablak készítése, | ||
- | <code java Program02.java> | + | <code java Program.java> |
import javax.swing.JFrame; | import javax.swing.JFrame; | ||
import javax.swing.JDialog; | import javax.swing.JDialog; | ||
Sor 1392: | Sor 1657: | ||
import java.awt.event.ActionEvent; | import java.awt.event.ActionEvent; | ||
- | class Program02 | + | class Program |
{ | { | ||
JButton gomb = new JButton(" | JButton gomb = new JButton(" | ||
JTextField mezo = new JTextField(10); | JTextField mezo = new JTextField(10); | ||
- | Program02() | + | Program() |
{ | { | ||
gomb.addActionListener(new ActionListener() | gomb.addActionListener(new ActionListener() | ||
Sor 1414: | Sor 1679: | ||
public static void main(String args[]) | public static void main(String args[]) | ||
{ | { | ||
- | new Program02(); | + | new Program(); |
} | } | ||
} | } | ||
Sor 1449: | Sor 1714: | ||
</ | </ | ||
- | ===== Ikon ===== | + | Főablak: |
+ | {{: | ||
- | <code java> | + | Párbeszédablak: |
- | import javax.swing.*; | + | |
- | class ap | + | {{: |
- | { | + | |
- | public static void main(String args[]) | + | |
- | | + | |
- | JFrame ablak = new JFrame(" | + | |
- | ablak.setLayout(null); | + | |
- | + | ||
- | ablak.setIconImage(new ImageIcon(" | + | |
- | ablak.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); | + | ===== JDilaog szülőablakon belül középre igazítva ===== |
- | ablak.setSize(400, | + | |
- | ablak.setVisible(true); | + | <code App.java> |
+ | import javax.swing.JButton; | ||
+ | import javax.swing.JDialog; | ||
+ | import javax.swing.JFrame; | ||
+ | import java.awt.Dimension; | ||
+ | |||
+ | class OperationFrame extends JDialog { | ||
+ | JButton button; | ||
+ | public OperationFrame(JFrame parent) { | ||
+ | super(parent); | ||
+ | this.button = new JButton(" | ||
+ | |||
+ | this.add(this.button); | ||
+ | this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); | ||
+ | this.setSize(300, | ||
+ | |||
+ | // Középre igazítjuk a dialógusablakot a szülőablak közepén | ||
+ | Dimension dim = parent.getSize(); | ||
+ | int w = this.getSize().width; | ||
+ | int h = this.getSize().height; | ||
+ | int x = parent.getLocation().x + (dim.width - w) / 2; | ||
+ | int y = parent.getLocation().y + (dim.height - h) / 2; | ||
+ | this.setLocation(x, | ||
+ | } | ||
+ | } | ||
+ | |||
+ | class MainFrame extends JFrame { | ||
+ | JButton button; | ||
+ | public MainFrame() { | ||
+ | this.button = new JButton(" | ||
+ | this.button.addActionListener(e -> { | ||
+ | this.startDialog(); | ||
+ | }); | ||
+ | |||
+ | this.add(this.button); | ||
+ | this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); | ||
+ | this.setSize(400, | ||
+ | this.setVisible(true); | ||
+ | } | ||
+ | private void startDialog() { | ||
+ | OperationFrame operationFrame = new OperationFrame(this); | ||
+ | operationFrame.setVisible(true); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | class App { | ||
+ | public static void main(String[] args) { | ||
+ | new MainFrame(); | ||
} | } | ||
} | } | ||
Sor 1472: | Sor 1777: | ||
- | Készíthetünk külön ikon változót, amit esetleg másra is használhatunk. | ||
- | <code java> | ||
- | ImageIcon ikon = new ImageIcon(" | ||
- | ablak.setIconImage(ikon.getImage()); | ||
- | </ | ||
+ | ===== Ikon ===== | ||
- | Esetleg így: | + | <code java> |
- | < | + | |
import javax.swing.*; | import javax.swing.*; | ||
- | import java.awt.*; | + | |
class Program extends JFrame | class Program extends JFrame | ||
{ | { | ||
Program() | Program() | ||
{ | { | ||
- | setIconImage(new ImageIcon(" | + | setIconImage(new ImageIcon(" |
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); | setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); | ||
setSize(300, | setSize(300, | ||
Sor 1498: | Sor 1798: | ||
} | } | ||
</ | </ | ||
+ | |||
+ | |||
+ | {{: | ||
+ | |||
+ | |||
+ | Készíthetünk külön ikon változót, amit esetleg másra is használhatunk. | ||
+ | <code java> | ||
+ | ImageIcon ikon = new ImageIcon(" | ||
+ | ablak.setIconImage(ikon.getImage()); | ||
+ | </ | ||
+ | |||
A megvalósításhoz egy rögtönzött ikon: | A megvalósításhoz egy rögtönzött ikon: | ||
- | * http:// | + | * https:// |
+ | ==== Ikon a gombhoz ==== | ||
- | <code java Program01.java> | + | <code java Program.java> |
import javax.swing.JFrame; | import javax.swing.JFrame; | ||
import javax.swing.JButton; | import javax.swing.JButton; | ||
import javax.swing.ImageIcon; | import javax.swing.ImageIcon; | ||
- | //~ import java.awt.Image; | + | |
- | class Program01 | + | class Program |
{ | { | ||
JButton gomb = new JButton(" | JButton gomb = new JButton(" | ||
- | Program01() | + | Program() |
{ | { | ||
setIconImage(new ImageIcon(" | setIconImage(new ImageIcon(" | ||
- | //~ Image kep = new ImageIcon(" | ||
- | //~ 24, 24, java.awt.Image.SCALE_SMOOTH); | ||
gomb.setIcon(new ImageIcon(" | gomb.setIcon(new ImageIcon(" | ||
Sor 1526: | Sor 1836: | ||
public static void main(String[] args) | public static void main(String[] args) | ||
{ | { | ||
- | new Program01(); | + | new Program(); |
} | } | ||
} | } | ||
</ | </ | ||
+ | |||
+ | Méretezés: | ||
+ | <code java> | ||
+ | Image kep = new ImageIcon(" | ||
+ | .getScaledInstance(24, | ||
+ | </ | ||
+ | |||
+ | |||
A program ikon csak kis méretben jelenik meg. A nyomógombhoz rendelt ikon viszont az eredeti | A program ikon csak kis méretben jelenik meg. A nyomógombhoz rendelt ikon viszont az eredeti | ||
Sor 1539: | Sor 1857: | ||
<code java> | <code java> | ||
java.net.URL imageURL = | java.net.URL imageURL = | ||
- | Program01.class.getResource(" | + | Program.class.getResource(" |
setIconImage(new ImageIcon(imageURL).getImage()); | setIconImage(new ImageIcon(imageURL).getImage()); | ||
</ | </ | ||
Sor 1546: | Sor 1864: | ||
<code java> | <code java> | ||
java.net.URL imageURL = | java.net.URL imageURL = | ||
- | getClass().getResource(" | + | getClass().getResource(" |
</ | </ | ||
Sor 1571: | Sor 1889: | ||
Minden JComponentnek lehet egy vagy több szegélye. | Minden JComponentnek lehet egy vagy több szegélye. | ||
- | A border, azaz a szegély megmondja, hogy nézzen ki egy | + | A border, azaz a szegély, megmondja, hogy nézzen ki egy |
Swing komponens széle, és körbefogja azt. | Swing komponens széle, és körbefogja azt. | ||
A JComponent-ek számára szegélyt a setBorder() metódussal | A JComponent-ek számára szegélyt a setBorder() metódussal | ||
- | határozhatunk meg. A BorderFactory osztályt használhatjuk | + | határozhatunk meg. |
- | a szegély | + | |
+ | Többféle | ||
+ | * EmptyBorder | ||
+ | * LinesBorder | ||
+ | * stb. | ||
+ | |||
+ | Ezek létrehozhatók az adott osztállyal vagy a BorderFactory kreátorral. | ||
+ | |||
+ | A következőkben néhány példát látunk: | ||
- | A következőben egy szimpla panel egyszerű szegélyét adjuk meg. | ||
<code java> | <code java> | ||
- | JPanel pane = new JPanel(); | + | this.panel1.setBorder(BorderFactory.createLineBorder(Color.BLUE)); |
- | pane.setBorder(BorderFactory.createLineBorder(Color.black)); | + | this.panel2.setBorder(BorderFactory.createRaisedBevelBorder()); |
+ | this.panel3.setBorder(BorderFactory.createLoweredBevelBorder()); | ||
+ | this.panel4.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.RAISED)); | ||
+ | this.panel5.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED)); | ||
+ | this.panel6.setBorder(BorderFactory.createEmptyBorder()); | ||
</ | </ | ||
+ | |||
+ | {{: | ||
==== Egyszerű szegély ==== | ==== Egyszerű szegély ==== | ||
Egy konkrét megvalósítás | Egy konkrét megvalósítás | ||
- | <code java Program01.java> | + | <code java Program.java> |
import javax.swing.*; | import javax.swing.*; | ||
import java.awt.*; | import java.awt.*; | ||
import javax.swing.border.*; | import javax.swing.border.*; | ||
- | class Program01 | + | class Program |
public static void main(String args[]) { | public static void main(String args[]) { | ||
JFrame ablak = new JFrame(" | JFrame ablak = new JFrame(" | ||
Sor 1608: | Sor 1939: | ||
} | } | ||
</ | </ | ||
- | + | ||
+ | {{: | ||
==== Szegély cím beállítása ==== | ==== Szegély cím beállítása ==== | ||
Sor 1617: | Sor 1949: | ||
import javax.swing.border.*; | import javax.swing.border.*; | ||
- | class ap | + | class Program |
{ | { | ||
public static void main(String args[]) | public static void main(String args[]) | ||
Sor 1642: | Sor 1974: | ||
} | } | ||
</ | </ | ||
+ | |||
+ | {{: | ||
Sor 1689: | Sor 2023: | ||
panel1.setBorder(new EmptyBorder(10, | panel1.setBorder(new EmptyBorder(10, | ||
</ | </ | ||
+ | ===== Szegélyek ===== | ||
+ | ==== LineBorder ==== | ||
+ | |||
+ | <code java MainWindow.java> | ||
+ | import java.awt.Color; | ||
+ | |||
+ | import javax.swing.JFrame; | ||
+ | import javax.swing.JPanel; | ||
+ | import javax.swing.border.LineBorder; | ||
+ | |||
+ | public class MainWindow extends JFrame { | ||
+ | JPanel panel1; | ||
+ | |||
+ | public MainWindow() { | ||
+ | this.panel1 = new JPanel(); | ||
+ | this.panel1.setBounds(5, | ||
+ | this.panel1.setBorder(new LineBorder(Color.BLUE)); | ||
+ | |||
+ | this.setLayout(null); | ||
+ | this.add(this.panel1); | ||
+ | this.setTitle(" | ||
+ | this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); | ||
+ | this.setSize(215, | ||
+ | this.setVisible(true); | ||
+ | } | ||
+ | | ||
+ | } | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | |||
==== BevelBorder ==== | ==== BevelBorder ==== | ||
Sor 1776: | Sor 2142: | ||
* http:// | * http:// | ||
+ | |||
+ | {{: | ||
+ | ==== Egyszerű rádiógomb ==== | ||
+ | |||
+ | <code java 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(" | ||
+ | radio2 = new JRadioButton(" | ||
+ | panel = new JPanel(); | ||
+ | |||
+ | group.add(radio1); | ||
+ | group.add(radio2); | ||
+ | panel.add(radio1); | ||
+ | panel.add(radio2); | ||
+ | add(panel); | ||
+ | |||
+ | panel.setBorder(BorderFactory.createTitledBorder(" | ||
+ | setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); | ||
+ | setSize(300, | ||
+ | setVisible(true); | ||
+ | } | ||
+ | public static void main(String args[]) | ||
+ | { | ||
+ | new Program(); | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | A rádiógombokat, | ||
+ | A megjelenés érdekében a JPanel objektumhoz is hozzá kell adni. | ||
+ | Persze a csoportosításnak csak akkor van értelme, ha több csoportunk is van. | ||
+ | |||
+ | {{: | ||
+ | |||
+ | |||
+ | |||
+ | ==== Csoportok ==== | ||
+ | |||
+ | |||
+ | |||
+ | <code java Program.java> | ||
+ | import javax.swing.*; | ||
+ | import java.awt.*; | ||
+ | |||
+ | 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 = {" | ||
+ | String[] s2 = {" | ||
+ | radio1 = new JRadioButton[6]; | ||
+ | radio2 = new JRadioButton[6]; | ||
+ | panel1 = new JPanel(); | ||
+ | panel2 = new JPanel(); | ||
+ | |||
+ | for(int i=0; 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, | ||
+ | panel2.setLayout(new GridLayout(3, | ||
+ | |||
+ | add(panel1); | ||
+ | add(panel2); | ||
+ | |||
+ | panel1.setBorder(BorderFactory.createTitledBorder(" | ||
+ | panel2.setBorder(BorderFactory.createTitledBorder(" | ||
+ | |||
+ | setLayout(new FlowLayout()); | ||
+ | setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); | ||
+ | setSize(300, | ||
+ | setVisible(true); | ||
+ | } | ||
+ | public static void main(String args[]) | ||
+ | { | ||
+ | new Program(); | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | 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: | ||
+ | |||
+ | <code java 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=0; 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 = {" | ||
+ | String[] s2 = {" | ||
+ | |||
+ | panel1 = new SajatPanel(s1); | ||
+ | panel2 = new SajatPanel(s2); | ||
+ | |||
+ | panel1.setLayout(new GridLayout(3, | ||
+ | panel2.setLayout(new GridLayout(3, | ||
+ | |||
+ | add(panel1); | ||
+ | add(panel2); | ||
+ | |||
+ | panel1.setBorder(BorderFactory.createTitledBorder(" | ||
+ | panel2.setBorder(BorderFactory.createTitledBorder(" | ||
+ | |||
+ | setLayout(new FlowLayout()); | ||
+ | setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); | ||
+ | setSize(300, | ||
+ | setVisible(true); | ||
+ | } | ||
+ | public static void main(String args[]) | ||
+ | { | ||
+ | new Program(); | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | {{: | ||
+ | |||
+ | ===== Jelölőnégyzetek ===== | ||
+ | |||
+ | <code java> | ||
+ | import javax.swing.JCheckBox; | ||
+ | //... | ||
+ | JCheckBox check1 = new JCheckBox(); | ||
+ | </ | ||
+ | |||
+ | |||
+ | Teljes kód: | ||
+ | <code java App.java> | ||
+ | import javax.swing.JCheckBox; | ||
+ | import javax.swing.JFrame; | ||
+ | |||
+ | class MainWindow extends JFrame { | ||
+ | |||
+ | JCheckBox check1 = new JCheckBox(); | ||
+ | public MainWindow() { | ||
+ | this.check1.setText(" | ||
+ | |||
+ | this.add(check1); | ||
+ | this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); | ||
+ | this.setSize(300, | ||
+ | this.setVisible(true); | ||
+ | } | ||
+ | public static void main(String[] args){ | ||
+ | new MainWindow(); | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | |||
+ | {{: | ||
+ | ==== Lekérdezés ==== | ||
+ | |||
+ | <code java> | ||
+ | this.check1.isSelected() | ||
+ | </ | ||
+ | |||
+ | |||
+ | <code java App.java> | ||
+ | import java.awt.FlowLayout; | ||
+ | import java.awt.event.ActionEvent; | ||
+ | |||
+ | import javax.swing.JButton; | ||
+ | import javax.swing.JCheckBox; | ||
+ | import javax.swing.JFrame; | ||
+ | |||
+ | public class MainWindow extends JFrame { | ||
+ | |||
+ | JCheckBox check1 = new JCheckBox(); | ||
+ | JButton button1 = new JButton(" | ||
+ | public MainWindow() { | ||
+ | this.check1.setText(" | ||
+ | this.button1.addActionListener((e)-> | ||
+ | button1_on_click(e); | ||
+ | }); | ||
+ | |||
+ | this.add(check1); | ||
+ | this.add(button1); | ||
+ | this.setLayout(new FlowLayout()); | ||
+ | this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); | ||
+ | this.setSize(300, | ||
+ | this.setVisible(true); | ||
+ | } | ||
+ | private void button1_on_click(ActionEvent e) { | ||
+ | | ||
+ | if(this.check1.isSelected()) { | ||
+ | System.out.println(" | ||
+ | } | ||
+ | | ||
+ | } | ||
+ | } | ||
+ | |||
+ | </ | ||
+ | |||
+ | {{: | ||
+ | ==== Beállítás ==== | ||
+ | |||
+ | <code java> | ||
+ | check1.setSelected(true); | ||
+ | </ | ||
+ | |||
+ | ==== Változás ==== | ||
+ | |||
+ | <code java> | ||
+ | this.check1.addItemListener((e)-> | ||
+ | System.out.println(" | ||
+ | }); | ||
+ | </ | ||
+ | |||
+ | |||
+ | Teljes kód: | ||
+ | |||
+ | <code java App.java> | ||
+ | import java.awt.FlowLayout; | ||
+ | import java.awt.event.ItemEvent; | ||
+ | import javax.swing.JCheckBox; | ||
+ | import javax.swing.JFrame; | ||
+ | |||
+ | public class MainWindow extends JFrame { | ||
+ | |||
+ | JCheckBox check1 = new JCheckBox(); | ||
+ | | ||
+ | public MainWindow() { | ||
+ | this.check1.setText(" | ||
+ | this.check1.addItemListener((e)-> | ||
+ | check1_on_itemchanged(e); | ||
+ | }); | ||
+ | |||
+ | this.add(check1); | ||
+ | this.setLayout(new FlowLayout()); | ||
+ | this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); | ||
+ | this.setSize(300, | ||
+ | this.setVisible(true); | ||
+ | } | ||
+ | |||
+ | private void check1_on_itemchanged(ItemEvent e) { | ||
+ | System.out.println(" | ||
+ | } | ||
+ | } | ||
+ | |||
+ | </ | ||
===== Táblázat ===== | ===== Táblázat ===== | ||
Sor 1781: | Sor 2444: | ||
==== Bevezetés a táblázatkészítésbe ==== | ==== Bevezetés a táblázatkészítésbe ==== | ||
- | Egy táblázat adatainak megjelenítéséhez a JTable osztály használhatjuk. | + | Egy táblázat adatainak megjelenítéséhez a **JTable** osztály használhatjuk. |
- | A táblázatot egy JScrollPane nevű konténerosztályra szoktuk feltenni. | + | A táblázatot egy **JScrollPane** nevű konténerosztályra szoktuk feltenni. |
Ha szeretnénk a sorok és oszlopok számát futási időben változtatnunk, | Ha szeretnénk a sorok és oszlopok számát futási időben változtatnunk, | ||
- | szükségünk lesz még a DefaultTableModel osztályra. | + | szükségünk lesz még a **DefaultTableModel** osztályra. |
Itt fontos megjegyezni, | Itt fontos megjegyezni, | ||
==== Egyszerű tábla ==== | ==== Egyszerű tábla ==== | ||
+ | |||
+ | Az első megoldásban nem használunk DefaultTableModel és JScrollPane osztályt, csak szimpla tömböket adunk | ||
+ | át a JTable konstruktorának. | ||
<code java Program.java> | <code java Program.java> | ||
Sor 1798: | Sor 2464: | ||
Program() | Program() | ||
{ | { | ||
+ | // A táblázat fejrésze: | ||
String[] mezoNevek = {" | String[] mezoNevek = {" | ||
+ | // A táblázat tartalmi része: | ||
Object[][] adat = { | Object[][] adat = { | ||
{1, "Nagy Peter", | {1, "Nagy Peter", | ||
Sor 1822: | Sor 2490: | ||
</ | </ | ||
+ | A fejrész nem jelenik meg, mivel a JScrollPane sem használtuk. | ||
+ | |||
+ | {{: | ||
==== Tábla fejléccel ==== | ==== Tábla fejléccel ==== | ||
Sor 1858: | Sor 2529: | ||
} | } | ||
</ | </ | ||
+ | Fordítsuk és futtassuk a programot, látható, hogy a táblázat fejrésze is megjelenik. | ||
- | <code java Program01.java> | + | |
+ | |||
+ | {{: | ||
+ | |||
+ | |||
+ | A következő példában mindhárom osztályt használjuk. Az adattartalom már külön, egy | ||
+ | model nevű objektumban lesz. A táblához a **setModel()** metódussal adjuk. | ||
+ | <code java Program.java> | ||
import javax.swing.JFrame; | import javax.swing.JFrame; | ||
import javax.swing.JTable; | import javax.swing.JTable; | ||
import javax.swing.JScrollPane; | import javax.swing.JScrollPane; | ||
import javax.swing.table.DefaultTableModel; | import javax.swing.table.DefaultTableModel; | ||
- | + | ||
- | class Program01 | + | class Program |
DefaultTableModel model = new DefaultTableModel(); | DefaultTableModel model = new DefaultTableModel(); | ||
JTable table = new JTable(); | JTable table = new JTable(); | ||
JScrollPane spanel = new JScrollPane(table); | JScrollPane spanel = new JScrollPane(table); | ||
- | + | ||
- | public | + | public |
- | + | ||
- | + | ||
Object[] felirat = {" | Object[] felirat = {" | ||
model.setColumnIdentifiers(felirat); | model.setColumnIdentifiers(felirat); | ||
- | + | ||
model.addRow(new Object[] {"Nagy János", | model.addRow(new Object[] {"Nagy János", | ||
- | + | ||
table.setModel(model); | table.setModel(model); | ||
- | + | ||
- | spanel.setBounds(100, 100, 300, 200); | + | spanel.setBounds(20, 20, 300, 200); |
- | + | ||
this.add(spanel); | this.add(spanel); | ||
this.setLayout(null); | this.setLayout(null); | ||
- | this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); | + | this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); |
- | this.setSize(800, 600); | + | this.setSize(400, 300); |
this.setVisible(true); | this.setVisible(true); | ||
} | } | ||
public static void main(String[] args) { | public static void main(String[] args) { | ||
- | Program01 | + | Program |
} | } | ||
} | } | ||
- | |||
</ | </ | ||
+ | |||
+ | {{: | ||
==== Oszlop, sor méretezés ==== | ==== Oszlop, sor méretezés ==== | ||
Sor 1911: | Sor 2590: | ||
</ | </ | ||
A példában a második sor magasságát állítjuk be. | A példában a második sor magasságát állítjuk be. | ||
- | ==== Szelekció | + | ==== Szelektálás |
Háttérszín: | Háttérszín: | ||
Sor 2061: | Sor 2740: | ||
==== Cella színezése ==== | ==== Cella színezése ==== | ||
- | <code java Program01.java> | + | <code java Program.java> |
import javax.swing.JFrame; | import javax.swing.JFrame; | ||
import javax.swing.JTable; | import javax.swing.JTable; | ||
Sor 2068: | Sor 2747: | ||
import java.awt.Color; | import java.awt.Color; | ||
import javax.swing.table.TableCellRenderer; | import javax.swing.table.TableCellRenderer; | ||
- | + | ||
- | class Program01 | + | class Program |
{ | { | ||
private JTable tabla; | private JTable tabla; | ||
- | + | ||
- | public | + | public |
{ | { | ||
setLayout(null); | setLayout(null); | ||
+ | |||
tabla = new JTable(9, 9); | tabla = new JTable(9, 9); | ||
- | tabla.setBounds(100, 100, 300, 200); | + | tabla.setBounds(20, 20, 300, 200); |
int columnWidht = 20; | int columnWidht = 20; | ||
int rowHeight = 25; | int rowHeight = 25; | ||
+ | |||
for(int i=0; i<9; i++) | for(int i=0; i<9; i++) | ||
tabla.getColumnModel().getColumn(i).setPreferredWidth(columnWidht); | tabla.getColumnModel().getColumn(i).setPreferredWidth(columnWidht); | ||
for(int i=0; i<9; i++) | for(int i=0; i<9; i++) | ||
tabla.setRowHeight(i, | tabla.setRowHeight(i, | ||
+ | |||
tabla.setDefaultRenderer(Object.class, | tabla.setDefaultRenderer(Object.class, | ||
tabla.getModel().setValueAt(Color.red, | tabla.getModel().setValueAt(Color.red, | ||
tabla.getModel().setValueAt(Color.red, | tabla.getModel().setValueAt(Color.red, | ||
add(tabla); | add(tabla); | ||
+ | |||
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); | setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); | ||
- | setSize(800, 600); | + | setSize(400, 300); |
setVisible(true); | setVisible(true); | ||
} | } | ||
public static void main(String args[]) | public static void main(String args[]) | ||
{ | { | ||
- | new Program01(); | + | new Program(); |
} | } | ||
class MyTableCellRenderer extends JLabel implements TableCellRenderer | class MyTableCellRenderer extends JLabel implements TableCellRenderer | ||
Sor 2115: | Sor 2794: | ||
} | } | ||
</ | </ | ||
+ | |||
+ | {{: | ||
Néhány metódus: | Néhány metódus: | ||
Sor 2242: | Sor 2923: | ||
</ | </ | ||
+ | |||
+ | ==== ArrayList DefaultTableModelbe ==== | ||
+ | |||
+ | <code java> | ||
+ | public void feltolt() { | ||
+ | // | ||
+ | ArrayList< | ||
+ | | ||
+ | for(Employee emp : employeeList) { | ||
+ | Vector< | ||
+ | row.add(emp.id); | ||
+ | row.add(emp.name); | ||
+ | row.add(emp.city); | ||
+ | row.add(emp.salary); | ||
+ | this.mainwindow.model.addRow(row); | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | Az ArrayList átalakítható másként is: | ||
+ | <code java> | ||
+ | for (Employee emp : employeeList) { | ||
+ | Object[] obj = {emp.id, emp.name, emp.city, emp.salary}; | ||
+ | model.addRow(obj); | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | |||
+ | ==== Komplett program ==== | ||
+ | |||
+ | <code java App.java> | ||
+ | public class App { | ||
+ | public static void main(String[] args) { | ||
+ | new MainFrame(); | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | <code java Employee.java> | ||
+ | public class Employee { | ||
+ | Integer id; | ||
+ | String name; | ||
+ | String city; | ||
+ | Double salary; | ||
+ | public Employee(Integer id, String name, String city, Double salary) { | ||
+ | this.id = id; | ||
+ | this.name = name; | ||
+ | this.city = city; | ||
+ | this.salary = salary; | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | <code java MainFrame.java> | ||
+ | import java.awt.BorderLayout; | ||
+ | import java.util.ArrayList; | ||
+ | import java.util.Vector; | ||
+ | |||
+ | import javax.swing.JFrame; | ||
+ | import javax.swing.JScrollPane; | ||
+ | import javax.swing.JTable; | ||
+ | import javax.swing.table.DefaultTableModel; | ||
+ | |||
+ | public class MainFrame extends JFrame{ | ||
+ | DefaultTableModel model = new DefaultTableModel(); | ||
+ | JTable table = new JTable(); | ||
+ | JScrollPane pane = new JScrollPane(); | ||
+ | public MainFrame() { | ||
+ | ArrayList< | ||
+ | employeeList.add(new Employee(1, "Erős István", | ||
+ | employeeList.add(new Employee(2, " | ||
+ | |||
+ | Object[] cols = {"#", | ||
+ | this.model.setColumnIdentifiers(cols); | ||
+ | for (Employee emp : employeeList) { | ||
+ | Vector< | ||
+ | row.add(emp.id); | ||
+ | row.add(emp.name); | ||
+ | row.add(emp.city); | ||
+ | row.add(emp.salary); | ||
+ | model.addRow(row); | ||
+ | } | ||
+ | |||
+ | this.table.setModel(model); | ||
+ | this.pane.setViewportView(table); | ||
+ | |||
+ | this.table.getColumnModel().getColumn(0).setPreferredWidth(5); | ||
+ | | ||
+ | this.setLayout(new BorderLayout()); | ||
+ | this.add(pane, | ||
+ | |||
+ | this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); | ||
+ | this.setSize(400, | ||
+ | this.setVisible(true); | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | |||
==== Irodalom a táblázathoz ==== | ==== Irodalom a táblázathoz ==== | ||
Sor 2249: | Sor 3031: | ||
Linkek: | Linkek: | ||
- | * http:// | + | * http:// |
- | * http:// | + | * http:// |
- | * http:// | + | |
- | * http:// | + | |
- | * http:// | + | |
* http:// | * http:// | ||
* http:// | * http:// | ||
Sor 2309: | Sor 3088: | ||
- | <code java> | + | < |
import javax.swing.*; | import javax.swing.*; | ||
import java.awt.BorderLayout; | import java.awt.BorderLayout; | ||
- | + | ||
- | class fulespanel | + | class Program |
{ | { | ||
+ | |||
private JTabbedPane fulespanelek; | private JTabbedPane fulespanelek; | ||
private JPanel panel1; | private JPanel panel1; | ||
private JPanel panel2; | private JPanel panel2; | ||
private JPanel panel3; | private JPanel panel3; | ||
- | + | ||
- | fulespanel() | + | Program() |
{ | { | ||
setTitle(" | setTitle(" | ||
- | setSize(800,600); | + | setSize(400,300); |
- | + | ||
setLayout( new BorderLayout() ); | setLayout( new BorderLayout() ); | ||
- | + | ||
panel1Keszites(); | panel1Keszites(); | ||
panel2Keszites(); | panel2Keszites(); | ||
panel3Keszites(); | panel3Keszites(); | ||
- | + | ||
fulespanelek = new JTabbedPane(); | fulespanelek = new JTabbedPane(); | ||
fulespanelek.addTab(" | fulespanelek.addTab(" | ||
fulespanelek.addTab(" | fulespanelek.addTab(" | ||
fulespanelek.addTab(" | fulespanelek.addTab(" | ||
- | + | ||
add(fulespanelek); | add(fulespanelek); | ||
} | } | ||
Sor 2365: | Sor 3144: | ||
public static void main(String args[]) | public static void main(String args[]) | ||
{ | { | ||
- | | + | |
ablak.setVisible(true); | ablak.setVisible(true); | ||
} | } | ||
} | } | ||
</ | </ | ||
+ | |||
+ | {{: | ||
+ | |||
< | < | ||
Sor 2384: | Sor 3166: | ||
==== Java füles panel külső linkek ==== | ==== Java füles panel külső linkek ==== | ||
- | | + | * http:// |
- | | + | * http:// |
- | * http:// | + | |
Sor 2570: | Sor 3351: | ||
</ | </ | ||
+ | {{: | ||
- | ===== ComboBox ===== | ||
- | |||
- | <code java Program.java> | ||
- | import javax.swing.*; | ||
- | |||
- | class Program extends JFrame | ||
- | { | ||
- | JComboBox combo; | ||
- | Program() | ||
- | { | ||
- | combo = new JComboBox(); | ||
- | |||
- | combo.setSize(100, | ||
- | combo.addItem(" | ||
- | combo.addItem(" | ||
- | combo.addItem(" | ||
- | combo.addItem(" | ||
- | combo.addItem(" | ||
- | |||
- | add(combo); | ||
- | setLayout(null); | ||
- | setSize(200, | ||
- | setVisible(true); | ||
- | } | ||
- | public static void main(String args[]) | ||
- | { | ||
- | new Program(); | ||
- | } | ||
- | } | ||
- | </ | ||
- | |||
- | A ComboBox alapértelmezett magassága 24 pont. | ||
- | |||
- | |||
- | <code java> | ||
- | combo.removeAllItem(); | ||
- | </ | ||
- | |||
- | Ha kiválasztott változott: | ||
- | <code java> | ||
- | 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: | ||
- | <code java> | ||
- | groupComboBox.addItemListener(new ItemListener() | ||
- | { | ||
- | public void itemStateChanged(ItemEvent e) | ||
- | { | ||
- | if(e.getStateChange()==2) | ||
- | ; // | ||
- | } | ||
- | }); | ||
- | </ | ||
- | |||
- | |||
- | <code java> | ||
- | int a = lld.getItemCount(); | ||
- | int b = lld.getSelectedIndex(); | ||
- | </ | ||
- | |||
- | Adott elem lekérése: | ||
- | <code java> | ||
- | if(lld.getItemCount()> | ||
- | String str = (String) lld.getSelectedItem(); | ||
- | </ | ||
- | |||
- | A getSelectedItem() metódus Object típust ad vissza. | ||
- | |||
- | ===== Rádiógomb ===== | ||
- | |||
- | ==== Egyszerű rádiógomb ==== | ||
- | |||
- | <code java 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(" | ||
- | radio2 = new JRadioButton(" | ||
- | panel = new JPanel(); | ||
- | |||
- | group.add(radio1); | ||
- | group.add(radio2); | ||
- | panel.add(radio1); | ||
- | panel.add(radio2); | ||
- | add(panel); | ||
- | |||
- | panel.setBorder(BorderFactory.createTitledBorder(" | ||
- | setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); | ||
- | setSize(300, | ||
- | setVisible(true); | ||
- | } | ||
- | public static void main(String args[]) | ||
- | { | ||
- | new Program(); | ||
- | } | ||
- | } | ||
- | </ | ||
- | |||
- | A rádiógombokat, | ||
- | A megjelenés érdekében a JPanel objektumhoz is hozzá kell adni. | ||
- | Persze a csoportosításnak csak akkor van értelme, ha több csoportunk is van. | ||
- | |||
- | ==== Csoportok ==== | ||
- | |||
- | |||
- | |||
- | <code java Program.java> | ||
- | import javax.swing.*; | ||
- | import java.awt.*; | ||
- | |||
- | 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 = {" | ||
- | String[] s2 = {" | ||
- | radio1 = new JRadioButton[6]; | ||
- | radio2 = new JRadioButton[6]; | ||
- | panel1 = new JPanel(); | ||
- | panel2 = new JPanel(); | ||
- | |||
- | for(int i=0; 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, | ||
- | panel2.setLayout(new GridLayout(3, | ||
- | |||
- | add(panel1); | ||
- | add(panel2); | ||
- | |||
- | panel1.setBorder(BorderFactory.createTitledBorder(" | ||
- | panel2.setBorder(BorderFactory.createTitledBorder(" | ||
- | |||
- | setLayout(new FlowLayout()); | ||
- | setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); | ||
- | setSize(300, | ||
- | setVisible(true); | ||
- | } | ||
- | public static void main(String args[]) | ||
- | { | ||
- | new Program(); | ||
- | } | ||
- | } | ||
- | </ | ||
- | 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: | ||
- | |||
- | <code java 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=0; 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 = {" | ||
- | String[] s2 = {" | ||
- | |||
- | panel1 = new SajatPanel(s1); | ||
- | panel2 = new SajatPanel(s2); | ||
- | |||
- | panel1.setLayout(new GridLayout(3, | ||
- | panel2.setLayout(new GridLayout(3, | ||
- | |||
- | add(panel1); | ||
- | add(panel2); | ||
- | |||
- | panel1.setBorder(BorderFactory.createTitledBorder(" | ||
- | panel2.setBorder(BorderFactory.createTitledBorder(" | ||
- | |||
- | setLayout(new FlowLayout()); | ||
- | setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); | ||
- | setSize(300, | ||
- | setVisible(true); | ||
- | } | ||
- | public static void main(String args[]) | ||
- | { | ||
- | new Program(); | ||
- | } | ||
- | } | ||
- | </ | ||
===== Szöveghely ===== | ===== Szöveghely ===== | ||
Sor 2863: | Sor 3397: | ||
===== Színezés ===== | ===== Színezés ===== | ||
- | Egy címkét | + | Egy feliratot |
<code java Program.java> | <code java Program.java> | ||
Sor 2889: | Sor 3423: | ||
- | A címke | + | A felirat |
<code java Program.java> | <code java Program.java> | ||
Sor 2926: | Sor 3460: | ||
Tulajdonképpen egy panelra tesszük, és azt színezzük. | Tulajdonképpen egy panelra tesszük, és azt színezzük. | ||
+ | |||
+ | {{: | ||
+ | |||
+ | |||
===== Fontok ===== | ===== Fontok ===== | ||
+ | A fontok beállításához a java.awt.Font osztályt használjuk. | ||
+ | A példában, egy JLabel objektumon alkalmazzuk a beállításokat. | ||
+ | A Font osztályból egy névtelen példányt fogunk hívni. | ||
<code java Program.java> | <code java Program.java> | ||
Sor 2956: | Sor 3497: | ||
</ | </ | ||
+ | {{: | ||
+ | |||
+ | |||
+ | |||
+ | Monospace font: | ||
+ | <code java> | ||
+ | cimke.setFont(new Font(Font.MONOSPACED, | ||
+ | </ | ||
===== Igazítás ===== | ===== Igazítás ===== | ||
Sor 2989: | Sor 3538: | ||
</ | </ | ||
+ | |||
+ | {{: | ||
+ | |||
+ | |||
===== Másik ablak ===== | ===== Másik ablak ===== | ||
Sor 3223: | Sor 3776: | ||
} | } | ||
} | } | ||
+ | </ | ||
+ | |||
+ | |||
+ | <code java> | ||
+ | // Szegély törlése: | ||
+ | this.button1.setBorder(BorderFactory.createEmptyBorder()); | ||
+ | |||
+ | //A tartalom (kép) töltse ki a gombot: | ||
+ | this.button1.setContentAreaFilled(false); | ||
</ | </ | ||
Sor 3896: | Sor 4458: | ||
* javax.swing.SprintLayout | * javax.swing.SprintLayout | ||
+ | ==== java.awt.FlowLayout ==== | ||
- | ==== javax.swing.BoxLayout ==== | + | <code java MainFrame.java> |
+ | import java.awt.FlowLayout; | ||
+ | import javax.swing.JButton; | ||
+ | import javax.swing.JFrame; | ||
+ | |||
+ | public class MainWindow extends JFrame { | ||
+ | JButton button1 = new JButton(" | ||
+ | JButton button2 = new JButton(" | ||
+ | JButton button3 = new JButton(" | ||
+ | |||
+ | public MainWindow() { | ||
+ | this.setLayout(new FlowLayout()); | ||
+ | this.add(button1); | ||
+ | this.add(button2); | ||
+ | this.add(button3); | ||
+ | this.setTitle(" | ||
+ | this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); | ||
+ | this.pack(); | ||
+ | this.setVisible(true); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | </ | ||
+ | |||
+ | {{: | ||
+ | |||
+ | |||
+ | ==== javax.swing.BoxLayout ==== | ||
<code java Program01.java> | <code java Program01.java> | ||
Sor 3931: | Sor 4521: | ||
} | } | ||
</ | </ | ||
+ | |||
+ | {{: | ||
Sor 3966: | Sor 4558: | ||
</ | </ | ||
+ | {{: | ||
+ | Függőlegesen: | ||
+ | |||
+ | <code java 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(" | ||
+ | JButton gomb2 = new JButton(" | ||
+ | JButton gomb3 = new JButton(" | ||
+ | JPanel panel = new JPanel(); | ||
+ | Program01() | ||
+ | { | ||
+ | |||
+ | // | ||
+ | panel.setLayout(new BoxLayout(panel, | ||
+ | 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(); | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | {{: | ||
==== GridBagLayout ==== | ==== GridBagLayout ==== | ||
+ | |||
+ | A GridBagLayout egy rugalmas elrendezéskezelő, | ||
+ | igazítja az összetevőket. A komponenseknek nem szükséges azonos méretűnek lenni. | ||
+ | Minden komponens megjelenési területe egy cella. | ||
+ | |||
+ | Minden komponens igazítását egy GridBagConstraints objektummal végezzük. | ||
+ | |||
+ | Minden komponensnek van egy [[https:// | ||
+ | |||
+ | |||
<code java> | <code java> | ||
Sor 3989: | Sor 4627: | ||
=== gridx, gridy === | === gridx, gridy === | ||
- | Sorok és oszlopok megadása. | + | Sorok és oszlopok megadása. Megmondjuk melyik cellába tesszük a komponenst. |
Az első mező címe: gridx=0 | Az első mező címe: gridx=0 | ||
Sor 3997: | Sor 4635: | ||
=== gridwidth, gridheight === | === gridwidth, gridheight === | ||
- | Az oszlopok és sorok szélessége és magassága. | + | Az oszlopok és sorok szélessége és magassága. Egy cella hány cellán nyúljon keresztül. |
- | * A előtt lévő sorral | + | * Az előtt lévő sorral |
* GridBagConstraints.RELATIVE | * GridBagConstraints.RELATIVE | ||
- | * | + | |
=== fill === | === fill === | ||
Sor 4038: | Sor 4676: | ||
* 0.0 (alapértelmezett) | * 0.0 (alapértelmezett) | ||
* 1.0 | * 1.0 | ||
+ | |||
+ | |||
+ | === Első példa === | ||
+ | |||
+ | <code java MainFrame.java> | ||
+ | |||
+ | import java.awt.GridBagConstraints; | ||
+ | import java.awt.GridBagLayout; | ||
+ | |||
+ | import javax.swing.JButton; | ||
+ | import javax.swing.JFrame; | ||
+ | |||
+ | public class MainWindow extends JFrame { | ||
+ | JButton button1 = new JButton(" | ||
+ | JButton button2 = new JButton(" | ||
+ | JButton button3 = new JButton(" | ||
+ | |||
+ | GridBagLayout layout = new GridBagLayout(); | ||
+ | GridBagConstraints c = new GridBagConstraints(); | ||
+ | |||
+ | public MainWindow() { | ||
+ | this.setLayout(new GridBagLayout()); | ||
+ | |||
+ | this.c.fill = GridBagConstraints.HORIZONTAL; | ||
+ | this.c.gridx = 0; | ||
+ | this.c.gridy = 0; | ||
+ | this.add(button1, | ||
+ | |||
+ | this.c.gridx = 1; | ||
+ | this.c.gridy = 0; | ||
+ | this.add(button2, | ||
+ | |||
+ | this.c.gridx = 0; | ||
+ | this.c.gridy = 2; | ||
+ | this.c.gridwidth = 2; | ||
+ | this.add(button3, | ||
+ | |||
+ | this.setTitle(" | ||
+ | this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); | ||
+ | this.pack(); | ||
+ | this.setVisible(true); | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | {{: | ||
+ | |||
+ | |||
+ | === Példa 02 === | ||
+ | |||
+ | |||
+ | <code java MainFrame.java> | ||
+ | |||
+ | import java.awt.GridBagConstraints; | ||
+ | import java.awt.GridBagLayout; | ||
+ | |||
+ | import javax.swing.JButton; | ||
+ | import javax.swing.JFrame; | ||
+ | |||
+ | public class MainWindow extends JFrame { | ||
+ | JButton button1 = new JButton(" | ||
+ | JButton button2 = new JButton(" | ||
+ | JButton button3 = new JButton(" | ||
+ | JButton button4 = new JButton(" | ||
+ | JButton button5 = new JButton(" | ||
+ | |||
+ | GridBagLayout layout = new GridBagLayout(); | ||
+ | GridBagConstraints c = new GridBagConstraints(); | ||
+ | |||
+ | public MainWindow() { | ||
+ | this.setLayout(new GridBagLayout()); | ||
+ | |||
+ | this.c.fill = GridBagConstraints.HORIZONTAL; | ||
+ | this.c.gridx = 0; | ||
+ | this.c.gridy = 0; | ||
+ | this.add(button1, | ||
+ | |||
+ | this.c.gridx = 1; | ||
+ | this.c.gridy = 0; | ||
+ | this.add(button2, | ||
+ | |||
+ | this.c.gridx = 2; | ||
+ | this.c.gridy = 0; | ||
+ | this.add(button3, | ||
+ | |||
+ | this.c.gridx = 0; | ||
+ | this.c.gridy = 1; | ||
+ | this.c.gridwidth = 3; | ||
+ | this.add(button4, | ||
+ | |||
+ | this.c.gridx = 0; | ||
+ | this.c.gridy = 2; | ||
+ | this.c.gridwidth = 3; | ||
+ | this.c.ipady = 40; | ||
+ | this.add(button5, | ||
+ | |||
+ | this.setTitle(" | ||
+ | this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); | ||
+ | this.pack(); | ||
+ | this.setVisible(true); | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | {{: | ||
+ | |||
+ | |||
=== További információk === | === További információk === | ||
- | * http:// | + | * https:// |
+ | * https:// | ||
+ | * https:// | ||
+ | * https:// | ||
Sor 4062: | Sor 4810: | ||
<code java> | <code java> | ||
button = new JButton(" | button = new JButton(" | ||
+ | pane.setLayout(new BorderLayout()); | ||
pane.add(button, | pane.add(button, | ||
</ | </ | ||
- | * PAGE_START | + | * BorderLayout.PAGE_START, BorderLayout.NORTH |
- | * PAGE_END | + | * BorderLayout.PAGE_END, BorderLayout.SOUTH |
- | * LINE_START | + | * BorderLayout.LINE_START, BorderLayout.WEST |
- | * LINE_END | + | * BorderLayout.LINE_END, BorderLayout.EAST |
- | * CENTER | + | * BorderLayout.CENTER |
+ | |||
+ | |||
+ | <code java MainFrame.java> | ||
+ | import java.awt.BorderLayout; | ||
+ | |||
+ | import javax.swing.JButton; | ||
+ | import javax.swing.JFrame; | ||
+ | |||
+ | public class MainWindow extends JFrame { | ||
+ | JButton button1 = new JButton(" | ||
+ | JButton button2 = new JButton(" | ||
+ | JButton button3 = new JButton(" | ||
+ | JButton button4 = new JButton(" | ||
+ | JButton button5 = new JButton(" | ||
+ | |||
+ | public MainWindow() { | ||
+ | this.setLayout(new BorderLayout()); | ||
+ | this.add(button1, | ||
+ | this.add(button2, | ||
+ | this.add(button3, | ||
+ | this.add(button4, | ||
+ | this.add(button5, | ||
+ | |||
+ | this.setTitle(" | ||
+ | this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); | ||
+ | this.pack(); | ||
+ | this.setVisible(true); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | </ | ||
+ | |||
+ | {{: | ||
Sor 4075: | Sor 4857: | ||
- | ==== GridLayout ==== | ||
+ | ==== GridLayout ==== | ||
+ | Importálás: | ||
<code java> | <code java> | ||
import java.awt.GridLayout; | import java.awt.GridLayout; | ||
Sor 4093: | Sor 4876: | ||
- | 4 sor és 3 oszlopos példa: | ||
- | <code java Program01.java> | + | |
- | import javax.swing.JFrame; | + | <code java MainFrame.java> |
- | import javax.swing.JButton; | + | |
import java.awt.GridLayout; | import java.awt.GridLayout; | ||
- | class Program01 | + | import javax.swing.JButton; |
- | { | + | import javax.swing.JFrame; |
- | JButton[] buttons; | + | |
- | Program01() | + | public |
- | { | + | JButton |
- | buttons | + | |
- | for(int i=0; i<12; i++) | + | |
- | { | + | |
- | buttons[i] | + | |
- | buttons[i].setText(Integer.toString(i)); | + | |
- | add(buttons[i]); | + | |
- | } | + | |
- | + | | |
- | setLayout(new GridLayout(4, | + | this.setLayout(new GridLayout(4, |
- | + | | |
- | pack(); | + | |
- | setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); | + | |
- | setVisible(true); | + | this.add(button4); |
- | } | + | |
- | public static void main(String[] args) | + | |
- | { | + | |
- | new Program01(); | + | |
- | } | + | |
+ | this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); | ||
+ | this.pack(); | ||
+ | this.setVisible(true); | ||
+ | } | ||
} | } | ||
</ | </ | ||
- | De panelon is használhatjuk a GridLayout elrendezéskezelőt: | + | {{:oktatas: |
- | <code java Program01.java> | + | ==== java.awt.CardLayout ==== |
+ | |||
+ | A CardLayout esetén az elemek egymás felett helyezkednek el. | ||
+ | Az elrendezés kezelő példányán keresztül léptethetünk a | ||
+ | komponensek között. | ||
+ | |||
+ | <code java MainFrame.java> | ||
+ | import java.awt.CardLayout; | ||
+ | |||
+ | import javax.swing.JButton; | ||
import javax.swing.JFrame; | import javax.swing.JFrame; | ||
- | import javax.swing.JButton; | ||
- | import javax.swing.JPanel; | ||
- | import javax.swing.JTextField; | ||
- | import java.awt.GridLayout; | ||
- | import javax.swing.BoxLayout; | ||
- | class Program01 | + | public |
- | { | + | JButton |
- | JButton[] buttons; | + | |
- | JPanel buttonsPanel; | + | |
- | JTextField displayTextField; | + | |
- | Program01() | + | |
- | { | + | public MainWindow() { |
- | buttonsPanel | + | this.button1.addActionListener(e-> |
- | displayTextField | + | this.button2.addActionListener(e-> |
- | + | | |
- | buttons | + | this.setLayout(card); |
- | for(int i=0; i<12; i++) | + | this.add(button1); |
- | { | + | this.add(button2); |
- | buttons[i] | + | this.add(button3); |
- | buttons[i].setText(Integer.toString(i)); | + | |
- | buttonsPanel.add(buttons[i]); | + | |
- | } | + | this.setTitle(" |
- | + | this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); | |
- | buttonsPanel.setLayout(new GridLayout(4, 3)); | + | |
- | setLayout(new BoxLayout(getContentPane(), | + | this.setVisible(true); |
- | BoxLayout.Y_AXIS)); | + | } |
- | add(displayTextField); | + | |
- | add(buttonsPanel); | + | |
- | pack(); | + | } |
- | setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); | + | |
- | setVisible(true); | + | |
- | } | + | |
- | public static | + | |
- | { | + | |
- | new Program01(); | + | |
- | } | + | |
} | } | ||
+ | |||
</ | </ | ||
- | + | {{: | |
===== TrayIcon ===== | ===== TrayIcon ===== | ||
Sor 4294: | Sor 5077: | ||
} | } | ||
</ | </ | ||
+ | |||
+ | {{: | ||
Esetleg készítsünk egy saját eszköztár osztályt: | Esetleg készítsünk egy saját eszköztár osztályt: | ||
- | <code java> | + | < |
- | public | + | import javax.swing.JToolBar; |
- | { | + | import java.awt.Color; |
- | public | + | import javax.swing.JButton; |
- | | + | |
+ | class MyToolbar | ||
+ | public | ||
+ | JButton button = new JButton(" | ||
+ | |||
+ | add(button); | ||
+ | button.setToolTipText(" | ||
setName(" | setName(" | ||
setBackground(new Color(245, 245, 245)); | setBackground(new Color(245, 245, 245)); | ||
Sor 4310: | Sor 5101: | ||
} | } | ||
} | } | ||
+ | </ | ||
+ | |||
+ | <code java Program01.java> | ||
+ | import javax.swing.JFrame; | ||
+ | import java.awt.BorderLayout; | ||
+ | |||
+ | class Program01 extends JFrame { | ||
+ | MyToolbar toolBar = new MyToolbar(); | ||
+ | Program01() { | ||
+ | add(toolBar, | ||
+ | setSize(400, | ||
+ | setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); | ||
+ | setVisible(true); | ||
+ | } | ||
+ | public static void main(String[] args) { | ||
+ | new Program01(); | ||
+ | } | ||
+ | } | ||
+ | |||
</ | </ | ||
Sor 4523: | Sor 5333: | ||
===== Fókusz ===== | ===== Fókusz ===== | ||
- | Az ablakos program esetén mindig | + | A GUI programnak általában |
Az ablakon komponenseket helyezünk el, amelyek közül egy mindig fókuszban van. | Az ablakon 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, | + | A fókusz alatt értjük, hogy aktívvá válik, kissé megváltozik a színezete, |
- | Mindig a fókuszban lévő komponensen tudunk egy billentyűnyomást figyelni. | + | abba írhatunk, vagy vezérelhetjük |
- | Ha azt szeretnénk, | + | Ha billentyűnyomásokat |
- | tegyük mindig vissza | + | lévő komponensen tudjuk alapesetben. Ha minden komponensnél |
+ | figyelni szeretnénk egy billentyűkombinációt, akkor azt az | ||
+ | ablakon kell figyeltetni. | ||
+ | A fókusz átadása az egész ablaknak: | ||
<code java> | <code java> | ||
this.requestFocus(); | this.requestFocus(); | ||
Sor 4594: | Sor 5407: | ||
+ | ===== Komponensek helyzete ===== | ||
+ | |||
+ | <code java> | ||
+ | public void move() { | ||
+ | int x = this.button1.getLocation().x; | ||
+ | int y = this.button1.getLocation().y; | ||
+ | this.button1.setLocation(x+100, | ||
+ | } | ||
+ | </ | ||
===== Függelék ===== | ===== Függelék ===== | ||
Sor 4838: | Sor 5660: | ||
===== Külső link ===== | ===== Külső link ===== | ||
* https:// | * https:// | ||
- | | + | |
* http:// | * http:// | ||
* http:// | * http:// | ||
* http:// | * http:// | ||
- | * http:// | ||
* http:// | * http:// | ||
* https:// | * https:// | ||
* https:// | * https:// | ||
+ | * https:// | ||
oktatas/programozas/java/java_gui_swing.1614774709.txt.gz · Utolsó módosítás: 2021/03/03 13:31 szerkesztette: admin