Gyakorlati alapok IV.
Végre ablakozunk! (AWT, Swing, JavaFX)
Almenü (submenu)
Az előző fejezetben (Menü létrehozása és beállítások című fejezet) létrehoztunk és beállítottunk egy egyszerű menüsávot, vele egy menüt és a benne lévő komponenseket. Ebben a rövid fejezetben egy almenüt illesztünk a menübe, ahonnan 2 további komponens lesz elérhető. A megoldás mindezek után már nem oly nehéz.
Az almenüt szintén
Jmenu típusként kell létrehoznunk (JMenu
submenu = new Jmenu("Options");), és ehhez kell hozzáadnunk az
almenüből elérhető komponenseket:
submenu.add(welcome);
submenu.add(close);
Ezután az almenüt hozzá kell adnunk a menühöz:
menu.add(submenu);
...majd a menüt a menüsávhoz:
menuBar.add(menu);
...illetve a menüsávot a frame-hez:
frame.setJMenuBar(menuBar);
A komponenseket a szokásos módon kell létrehoznunk és konfigurálnunk...
JMenuItem about, visit, welcome, close;
visit = new JMenuItem("Visit my website!");
about = new JMenuItem("About");
welcome = new JMenuItem("Welcome message");
close = new JMenuItem("Close");
...illetve a komponensekhez tartozó egéreseményeket -amelyeket a jelen
módszertanon belül legtöbbször lambda-kifejezésekkel aktiválunk (A
funkcionális interfész és a lambda-kifejezések című
fejezet)-, szintén le kell kezelnünk:
visit.addActionListener(event -> menuVisit());
about.addActionListener(event -> menuAbout());
welcome.addActionListener(event -> menuWelcome());
close.addActionListener(event -> menuClose());
További érdekesség, hogy lehetőségünk van a menükomponensek közé vízszintes
elválasztókat tettünk (separator):
menu.addSeparator();
Nézzük meg a futtatható Java-kódot!
Main.java
public class
Main {
public static void main(String[] args) {
Window window = new Window();
}
}
Window.java
import java.awt.*;
import java.net.URI;
import javax.swing.*;
class Window extends JFrame{
JMenuItem about, visit, welcome, close;
JFrame frame = new JFrame();
Window() {
super();
JMenuBar menuBar = new JMenuBar();
JMenu menu = new JMenu("Menu");
JMenu submenu = new JMenu("Options");
menuBar.add(menu);
visit = new JMenuItem("Visit my website!");
about = new JMenuItem("About");
welcome = new JMenuItem("Welcome message");
close = new JMenuItem("Close");
menu.add(visit);
menu.add(about);
menu.addSeparator();
submenu.add(welcome);
submenu.add(close);
menu.add(submenu);
frame.setJMenuBar(menuBar);
visit.addActionListener(event -> menuVisit());
about.addActionListener(event -> menuAbout());
welcome.addActionListener(event -> menuWelcome());
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 menuWelcome() {
JOptionPane.showMessageDialog(frame, "This is just a welcome
message!");
}
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/):