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!

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

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/):

 

www.informatika-programozas.hu - Menü