Gyakorlati alapok IV.
Végre ablakozunk! (AWT, Swing, JavaFX)
Menü létrehozása és beállítások
Mindannyian találkoztunk már a most tárgyalandó komponenssel, a menüvel, amely
voltaképpen egy vízszintes sávból legördülő funkciólista. Fő jellegzetességei:
-
legtöbbször több komponensből áll,
-
minden egyes komponenst önálló, legtöbbször egéreseményként kell lekezelnünk.
Először nézzük meg menügeneráló
kódunkat, majd utána kielemezzük azt:
JMenuBar menuBar = new JMenuBar();
JMenu menu = new JMenu("Menu");
menuBar.add(menu);
visit = new JMenuItem("Visit my website!");
about = new JMenuItem("About");
close = new JMenuItem("Close");
menu.add(visit);
menu.add(about);
menu.add(close);
frame.setJMenuBar(menuBar);
Először létre kell hoznunk a menü komponenst (JMenu menu
= new Jmenu("Menu")), majd azt a sávot, amelybe a menüt helyezzük (JMenuBar
menuBar = new JmenuBar()).
Ezután a menüsávhoz hozzáadjuk a menüt (menuBar.add(menu)),
majd a menükomponenseket:
visit = new JMenuItem("Visit my website!");
about = new JMenuItem("About");
close = new JMenuItem("Close");
További lépésként a menükomponenseket hozzá kell adnunk a menühöz...
menu.add(visit);
menu.add(about);
menu.add(close);
...majd az egész menücsomagot a frame
objektumhoz, amelyet most a menuBar képvisel:
frame.setJMenuBar(menuBar);
Nyilvánvalóan minden egyes menükomponenshez eseménykezelést kell
hozzárendelnünk, ezt többféleképpen is megtehetjük. Az alábbi 2 futtatható
Java-kód felső megoldásában a „klasszikusnak” mondható
actionPerformed(ActionEvent e) függvény bevetésével és a benne lévő
if(e.getSource() függvény választási kényszerével
kezeljük le a különböző menükomponensek eseményeit.
A 2. megoldásban pedig a honlapon folyamatosan alkalmazott általános
megoldásként, tehát megszokott módon külön függvényes lambda-kifejezések
használatával oldjuk meg az eseménykezelést (A
funkcionális interfész és a lambda-kifejezések című fejezet):
visit.addActionListener(event -> menuVisit());
about.addActionListener(event -> menuAbout());
close.addActionListener(event -> menuClose());
Nézzük meg a 2 futtatható Java-kódot!

Main.java
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.URI;
import javax.swing.*;
class Window extends JFrame implements ActionListener {
JMenuItem close, about, visit;
JFrame frame = new JFrame();
Window() {
super();
JMenuBar menuBar = new JMenuBar();
JMenu menu = new JMenu("Menu");
menuBar.add(menu);
visit = new JMenuItem("Visit my website!");
about = new JMenuItem("About");
close = new JMenuItem("Close");
menu.add(visit);
menu.add(about);
menu.add(close);
frame.setJMenuBar(menuBar);
visit.addActionListener(this);
about.addActionListener(this);
close.addActionListener(this);
Center center = new Center();
frame.setSize(400, 300);
frame.setTitle("PJP - Penzes Java Programming");
center.setCenter(frame);
frame.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource() == visit) {
try {
Desktop.getDesktop().browse(new URI("http://www.informatika-programozas.hu"));
} catch (Exception ex) {
JOptionPane.showMessageDialog(frame,
"Connection was not successful!");
}
}
if(e.getSource() == about) {
JOptionPane.showMessageDialog(frame, "Copyright © PJP-Penzes
Laszlo - 2015-2022. All rights reserved.\n"
+ "This free software is only educational purpose.\n"
+ "It is not allowed to redistribute, sale or change the
statement of copyrights.\n"
+ "If you need any additional help, plesase send me an e-mail
here:\n"
+ "info@informatika-programozas.hu");
}
if(e.getSource() == close) {
System.exit(0);
}
}
}
Végeredmény (a monitor közepén / felbontástól függetlenül/):


Main.java
public class
Main {
public static void main(String[] args) {
Window window = new Window();
}
}
Window.java
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.URI;
import javax.swing.*;
class Window extends JFrame{
JMenuItem close, about, visit;
JFrame frame = new JFrame();
Window() {
super();
JMenuBar menuBar = new JMenuBar();
JMenu menu = new JMenu("Menu");
menuBar.add(menu);
visit = new JMenuItem("Visit my website!");
about = new JMenuItem("About");
close = new JMenuItem("Close");
menu.add(visit);
menu.add(about);
menu.add(close);
frame.setJMenuBar(menuBar);
visit.addActionListener(event -> menuVisit());
about.addActionListener(event -> menuAbout());
close.addActionListener(event -> menuClose());
Center center = new Center();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 300);
frame.setTitle("PJP - Penzes Java Programming");
center.setCenter(frame);
frame.setVisible(true);
}
private void menuVisit() {
try {
Desktop.getDesktop().browse(new URI("http://www.informatika-programozas.hu"));
} catch (Exception ex) {
JOptionPane.showMessageDialog(frame, "Connection was not
successful!");
}
}
private void menuAbout() {
JOptionPane.showMessageDialog(frame, "Copyright (C) PJP-Pénzes László -
2015-2022. All rights reserved.\n"
+ "This free software is for only educational purpose.\n"
+ "Not allowed to redistribute, sale or change the statement
of copyrights.\n"
+ "If you need any additional help, plesase send me an e-mail
here:\n"
+ "info@informatika-programozas.hu");
}
private void menuClose() {
System.exit(0);
}
}
Center.java
import java.awt.GraphicsEnvironment;
import java.awt.Point;
import javax.swing.JFrame;
public class Center {
void setCenter(JFrame frame) {
Point center =
GraphicsEnvironment.getLocalGraphicsEnvironment().getCenterPoint();
int x = (int) center.getX() - (frame.getWidth() / 2);
int y = (int) center.getY() - (frame.getHeight() / 2);
Point ablakCenter = new Point(x, y);
frame.setLocation(ablakCenter);
}
}
Végeredmény (a monitor közepén / felbontástól függetlenül/):


