Tartalomjegyzék
Java GUI Swing Alternatív módon
- Szerző: Sallai András
- Copyright © 2011, Sallai András
- Szerkesztve: 2011, 2020
- Licenc: CC BY-SA 4.0
- Web: https://szit.hu
Bevezetés
Alternatív megoldásokat láthatunk a swing komponensek használatára.
JFrame örökítése
- Ablak.java
import javax.swing.*; class Ablak extends JFrame { Ablak() { this.setVisible(true); this.setBounds(50,50,300,100); } public static void main(String args[]) { new Ablak(); } }
A Dimension osztály használata
A Dimension osztály segítségével ablakok méretet tudjuk meghatározni.
- Ablak.java
import javax.swing.JButton; import javax.swing.JFrame; import java.awt.Dimension; class Ablak extends JFrame { JButton GombElso; Ablak() { this.setSize(new Dimension(450, 130)); GombElso = new JButton(); this.setVisible(true); this.setLayout(null); GombElso.setText("Valami"); GombElso.setBounds(10,10, 100, 50); this.add(GombElso); } public static void main(String args[]) { new Ablak(); } }
Eseménykezelés megoldások
Eseménykezelés névtelen osztályhívással
Meghívom az ActionListener interfészt, és hívás helyén megvalósítom a a kötlező actionPerformed() metódust.
- Program.java
import java.awt.event.*; import javax.swing.*; class Program extends JFrame { JButton gomb; Program() { gomb = new JButton("Nyomj le!"); gomb.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { setTitle("Lenyomták"); } }); add(gomb); setSize(200, 100); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); } public static void main(String[] args) { new Program(); } }
Eseménykezelés az ActionListener implementálásával
A Program osztályunk implementálja a ActionListener interfészt, így kötelező megvalósítanunk az osztályunkban egy actionPerformed() metódust.
Az .addActionListener() metódus this paramétere itt annyit jelent, hogy ez az osztály implementálja az eseményfigyelőt.
- 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(0); } public static void main(String args[]) { new Program(); } }
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(0); }
Jelenleg csak egyetlen komponenshez rendeltünk eseményfigyelőt, így nem használtuk fel az „e” változót sem.
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); } public void actionPerformed(ActionEvent e) { if(e.getSource() == kilepesgomb) System.exit(0); 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és beépített osztállyal
import java.awt.Dimension; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; class Ablak extends JFrame { JButton gombElso; Ablak() { gombElso = new JButton(); gombElso.setText("Valami"); gombElso.setBounds(10,10, 100, 50); gombElso.addActionListener(new ButtonListener1()); this.add(gombElso); this.setLayout(null); this.setSize(new Dimension(450, 130)); this.setVisible(true); } public static void main(String args[]) { new Ablak(); } class ButtonListener1 implements ActionListener { public void actionPerformed(ActionEvent e) { gombElso.setText("Más"); } } }
Időzítés a Swing csomag Timer osztályával
Példa1
- Program.java
import javax.swing.*; import java.awt.event.*; class Program extends JFrame { Program() { Timer t = new Timer(2000, new ActionListener() { public void actionPerformed(ActionEvent e) { if(getTitle()=="Semmi") setTitle("Valami"); else setTitle("Semmi"); } }); t.start(); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(400, 300); setVisible(true); } public static void main(String args[]) { new Program(); } }
Az időzítés leállítása:
t.stop();
Példa2
- Program.java
import javax.swing.*; import java.awt.event.*; class Program extends JFrame { Program() { ActionListener listener = new ActionListener() { public void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(null, "Üzi"); } }; Timer timer = new Timer(5000, listener); timer.start(); setSize(800, 600); setVisible(true); } public static void main(String args[]) { new Program(); } }
Timer link
Az ablak középre igazítása
A JFrame bővítése
A középre igazításról a Java Swing fejezetben van néhány példa. Itt most a JFrame osztályból egy saját osztály készítünk és azt bővítjük egy metódussal.
- SFrame
import javax.swing.JFrame; import javax.swing.JLabel; import java.awt.FlowLayout; import java.awt.GraphicsEnvironment; import java.awt.Point; class SFrame extends JFrame { public void setCenter() { Point center = GraphicsEnvironment.getLocalGraphicsEnvironment().getCenterPoint(); int x =(int) center.getX() - (this.getWidth()/2); int y =(int) center.getY() - (this.getHeight()/2); Point windowCenter = new Point(x, y); this.setLocation(windowCenter); } }
A felhasználása:
- Program01.java
import javax.swing.JFrame; import javax.swing.JButton; class Program01 extends SFrame { JButton closeButton = new JButton("Bezár"); public Program01() { this.closeButton.setBounds(100, 100, 100, 30); this.closeButton.addActionListener(event -> closeButtonAction()); this.add(closeButton); this.setLayout(null); this.setSize(800, 600); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setCenter(); this.setVisible(true); } public void closeButtonAction() { System.exit(0); } public static void main(String[] args) { Program01 prog = new Program01(); } }