[[:oktatas:programozás:java|< Java]]
====== Java GUI Swing Alternatív módon ======
* **Szerző:** Sallai András
* Copyright (c) 2011, Sallai András
* Szerkesztve: 2011, 2020
* Licenc: [[https://creativecommons.org/licenses/by-sa/4.0/|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 =====
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.
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.
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.
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 ====
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 ====
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 ====
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 ====
* http://www.leepoint.net/notes-java/other/10time/20timer.html
* http://stackoverflow.com/questions/1006611/java-swing-timer
* http://docs.oracle.com/javase/6/docs/api/javax/swing/Timer.html
===== 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.
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:
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();
}
}