Menu, một thành phần quan trọng trong ứng dụng Java Swing, là nơi chứa tất cả các phím chức năng của ứng dụng. Để tạo một menu trong Java Swing, chúng ta cần sử dụng các class như JMenu, JMenuItem, và JMenuItemListener. Trên thực tế, tạo menu trong Java Swing không hề khó như bạn nghĩ. Hãy cùng khám phá cách tạo menu đơn giản và menu con trong Java Swing.
Tạo menu đơn giản
Trước khi đi vào chi tiết, hãy thử tạo một menu đơn giản bao gồm 3 phần tử và xử lý sự kiện khi chọn một phần tử bất kỳ. Khi chọn một phần tử, tên của phần tử đó sẽ được xuất ra JTextField.
Đầu tiên, chúng ta cần import các package cần thiết:
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
Tiếp theo, hãy tạo class SimpleMenus
kế thừa từ JApplet
. Class này sẽ chứa các phần tử và sự kiện của menu:
class SimpleMenus extends JApplet {
private JTextField t = new JTextField(15);
private ActionListener al = new ActionListener() {
public void actionPerformed(ActionEvent e) {
t.setText(((JMenuItem) e.getSource()).getText());
}
};
private JMenu[] menus = {
new JMenu("Winken"),
new JMenu("Blinken"),
new JMenu("Nod")
};
private JMenuItem[] items = {
new JMenuItem("Fee"),
new JMenuItem("Fi"),
new JMenuItem("Fo"),
new JMenuItem("Zip"),
new JMenuItem("Zap"),
new JMenuItem("Zot"),
new JMenuItem("Olly"),
new JMenuItem("Oxen"),
new JMenuItem("Free")
};
public void init() {
for (int i = 0; i items.length; i++) {
items[i].addActionListener(al);
menus[i % 3].add(items[i]);
}
JMenuBar mb = new JMenuBar();
for (int i = 0; i menus.length; i++) {
mb.add(menus[i]);
}
setJMenuBar(mb);
Container cp = getContentPane();
cp.setLayout(new FlowLayout());
cp.add(t);
}
public static void main(String[] args) {
run(new SimpleMenus(), 200, 200);
}
public static void run(JApplet applet, int width, int height) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.getContentPane().add(applet);
frame.setSize(width, height);
applet.init();
applet.start();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
Kết quả của menu đơn giản như sau:
Tạo submenu trong Java Swing
Đôi khi chúng ta cần tạo các submenu bên trong một menu con. Dưới đây là một ví dụ về cách tạo submenu trong Java Swing.
Import các package cần thiết:
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.KeyEvent;
import javax.swing.*;
Tiếp theo, hãy tạo class SwingMenus
kế thừa từ JApplet
. Class này cũng chứa các phần tử và sự kiện của menu:
class SwingMenus extends JApplet {
private String[] flavors = {
"Chocolate",
"Strawberry",
"Vanilla Fudge Swirl",
"Mint Chip",
"Mocha Almond Fudge",
"Rum Raisin",
"Praline Cream",
"Mud Pie"
};
private JTextField t = new JTextField("No flavor", 30);
private JMenuBar mb1 = new JMenuBar();
private JMenu f = new JMenu("File");
private JMenu m = new JMenu("Flavors");
private JMenu s = new JMenu("Safety");
private JCheckBoxMenuItem[] safety = {
new JCheckBoxMenuItem("Guard"),
new JCheckBoxMenuItem("Hide")
};
private JMenuItem[] file = {
new JMenuItem("Open")
};
private JMenuBar mb2 = new JMenuBar();
private JMenu fooBar = new JMenu("fooBar");
private JMenuItem[] other = {
new JMenuItem("Foo", KeyEvent.VK_F),
new JMenuItem("Bar", KeyEvent.VK_A),
new JMenuItem("Baz")
};
private JButton b = new JButton("Swap Menus");
class BL implements ActionListener {
public void actionPerformed(ActionEvent e) {
JMenuBar m = getJMenuBar();
setJMenuBar(m == mb1 ? mb2 : mb1);
validate();
}
}
class ML implements ActionListener {
public void actionPerformed(ActionEvent e) {
JMenuItem target = (JMenuItem) e.getSource();
String actionCommand = target.getActionCommand();
if (actionCommand.equals("Open")) {
String s = t.getText();
boolean chosen = false;
for (int i = 0; i flavors.length; i++) {
if (s.equals(flavors[i])) {
chosen = true;
}
}
if (!chosen) {
t.setText("Choose a flavor first!");
} else {
t.setText("Opening " + s + ". Mmm, mm!");
}
}
}
}
class FL implements ActionListener {
public void actionPerformed(ActionEvent e) {
JMenuItem target = (JMenuItem) e.getSource();
t.setText(target.getText());
}
}
class FooL implements ActionListener {
public void actionPerformed(ActionEvent e) {
t.setText("Foo selected");
}
}
class BarL implements ActionListener {
public void actionPerformed(ActionEvent e) {
t.setText("Bar selected");
}
}
class BazL implements ActionListener {
public void actionPerformed(ActionEvent e) {
t.setText("Baz selected");
}
}
class CMIL implements ItemListener {
public void itemStateChanged(ItemEvent e) {
JCheckBoxMenuItem target = (JCheckBoxMenuItem) e.getSource();
String actionCommand = target.getActionCommand();
if (actionCommand.equals("Guard")) {
t.setText("Guard the Ice Cream! Guarding is " + target.getState());
} else if (actionCommand.equals("Hide")) {
t.setText("Hide the Ice Cream! Is it hidden? " + target.getState());
}
}
}
public void init() {
ML ml = new ML();
CMIL cmil = new CMIL();
safety[0].setActionCommand("Guard");
safety[0].setMnemonic(KeyEvent.VK_G);
safety[0].addItemListener(cmil);
safety[1].setActionCommand("Hide");
safety[1].setMnemonic(KeyEvent.VK_H);
safety[1].addItemListener(cmil);
other[0].addActionListener(new FooL());
other[1].addActionListener(new BarL());
other[2].addActionListener(new BazL());
FL fl = new FL();
for (int i = 0; i flavors.length; i++) {
JMenuItem mi = new JMenuItem(flavors[i]);
mi.addActionListener(fl);
m.add(mi);
if ((i + 1) % 3 == 0) {
m.addSeparator();
}
}
for (int i = 0; i safety.length; i++) {
s.add(safety[i]);
}
s.setMnemonic(KeyEvent.VK_A);
f.add(s);
f.setMnemonic(KeyEvent.VK_F);
for (int i = 0; i file.length; i++) {
file[i].addActionListener(fl);
f.add(file[i]);
}
mb1.add(f);
mb1.add(m);
setJMenuBar(mb1);
t.setEditable(false);
Container cp = getContentPane();
cp.add(t, BorderLayout.CENTER);
b.addActionListener(new BL());
b.setMnemonic(KeyEvent.VK_S);
cp.add(b, BorderLayout.NORTH);
for (int i = 0; i other.length; i++) {
fooBar.add(other[i]);
}
fooBar.setMnemonic(KeyEvent.VK_B);
mb2.add(fooBar);
}
public static void main(String[] args) {
run(new SwingMenus(), 300, 300);
}
public static void run(JApplet applet, int width, int height) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.getContentPane().add(applet);
frame.setSize(width, height);
applet.init();
applet.start();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
Kết quả của submenu như sau: Không có ảnh hiển thị. Chúng tôi khuyến khích bạn truy cập vào đường dẫn gốc để xem đầy đủ ví dụ và ảnh minh họa.