Tartalomjegyzék

< Java

Java GUI Swing Alternatív módon

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();
	}
}

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();	
	}
}