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:

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!

 

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

 

 

 

 

 

 

 

 

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

 

www.informatika-programozas.hu - Menü

 

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

 

www.informatika-programozas.hu - Menü