目录
- Swing 菜单组件
- 1. 创建菜单栏
- 2. 下拉式菜单
- a. 应用:下拉菜单
- 3. 弹出式菜单
- a. 弹出式菜单
Swing 菜单组件
- 真正的 GUI 应用程序一定有菜单,它可以给用户提供简明清晰的信息,让用户从多个项目中进行选择,也可以节省界面空间;
1. 创建菜单栏
- 位于窗口顶部的菜单栏和其子菜单一般会包括一个应用程序的所有方法和功能,是比较重要的组件;
- 创建菜单栏的基本步骤如下:
(1)创建菜单栏对象,并添加到窗体的菜单中;
(2)创建菜单对象,并将菜单对象添加到菜单栏对象中;
(3)创建菜单项对象,并将菜单项对象添加到菜单对象中;
(4)为菜单项添加事件监听器,捕获菜单项被单击的时间,从而完成相应的业务逻辑;
(5)如果需要,还可以在菜单中包含子菜单,即将菜单对象添加到其所属的上级菜单对象中;
(6)通常情况下,一个菜单栏可以包含很多个菜单,可以重复步骤(2)~(5)添加新菜单;
2. 下拉式菜单
- 一个完整的菜单系统包括菜单栏(JMenuBar)、装配到菜单栏上的菜单(JMenu)和菜单上的菜单项(JMenuItem)。菜单项的作用与按钮相似,用户单击菜单项时引发一个 ActionEvent;
- JRadioButtonMenuItem 类用于创建单选菜单项,即在一组中只能选择一个项,被选择的项显示为选择状态,同时其他任何以前被选择的项都切换到未选择的状态;
- 使用菜单的基本过程:
(1)创建一个菜单栏(JMenuBar);
(2)创建若干菜单(JMenu),并把它们添加到菜单栏(JMenuBar)中;
(3)创建若干菜单项(JMenuItem),或者若干带有复选框的菜单项(JCheckBoxMenuItem),并把他们分别添加到每个 JMenu 中;
(4)通过 JFrame 类的 setJMenuBar() 方法,将 JMenuBar 添加到框架中,使之能够显示;
a. 应用:下拉菜单
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Test extends JFrame {
public Test() {
JMenuBar menuBar = new JMenuBar(); // 创建菜单栏
this.setJMenuBar(menuBar); // 将菜单栏添加到JFrame窗口中
JMenu menu = new JMenu("操作"); // 创建菜单
menuBar.add(menu); // 将菜单添加到菜单栏上
// 创建两个菜单项
JMenuItem item1 = new JMenuItem("弹出窗口");
JMenuItem item2 = new JMenuItem("关闭");
// 为菜单项添加事件监听器
item1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// 创建一个JDialog窗口
JDialog dialog = new JDialog(Test.this, true);
dialog.setTitle("弹出窗口");
dialog.setSize(200, 200);
dialog.setLocation(50, 50);
dialog.setVisible(true);
}
});
item2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
menu.add(item1); // 将菜单项添加到菜单中
menu.addSeparator(); // 添加一个分隔符
menu.add(item2);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(300, 300);
this.setVisible(true);
}
public static void main(String[] args) {
new Test();
}
}
- 效果图:
3. 弹出式菜单
- 弹出式菜单(JPopupMenu)也称快捷菜单,它可以附加在任何组件上使用。当在附有快捷菜单的组件上右击时,即显示出快捷菜单。弹出式菜单的结构与下拉式菜单中的菜单项 JMenu 类似,一个弹出式菜单包含若干个菜单项JMenuItem。只是,这些菜单项不是装配到 JMenu 中,而是装配到 JPopupMenu 中;
a. 弹出式菜单
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
public class Test extends JFrame {
private JPopupMenu popupMenu;
public Test() {
// 创建一个JPopupMenu菜单
popupMenu = new JPopupMenu();
// 创建三个JMenuItem菜单项
JMenuItem refreshItem = new JMenuItem("refresh");
JMenuItem createItem = new JMenuItem("create");
JMenuItem exitItem = new JMenuItem("exit");
// 为exitItem菜单项添加事件监听器
exitItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
// 往JPopupMenu菜单添加菜单项
popupMenu.add(refreshItem);
popupMenu.add(createItem);
popupMenu.addSeparator();
popupMenu.add(exitItem);
// 为JFrame窗口添加clicked鼠标事件监听器
this.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
// 如果单击的是鼠标的右键,显示JPopupMenu菜单
if (e.getButton() == e.BUTTON3) {
popupMenu.show(e.getComponent(), e.getX(), e.getY());
}
}
});
this.setSize(300, 300);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
public static void main(String[] args) {
new Test();
}
}
- 效果图(鼠标右键):