98、Swing菜单系统:创建与使用指南

Swing菜单系统:创建与使用指南

1. Swing菜单系统概述

Swing菜单系统是Swing GUI环境的重要组成部分,它为用户提供了访问程序功能的便捷方式。Swing对菜单提供了广泛的支持,其菜单系统包含以下几个关键元素:
- 菜单栏(Menu Bar) :应用程序的主菜单,通常位于窗口顶部。
- 标准菜单(Standard Menu) :可包含可选择的菜单项或其他子菜单。
- 弹出菜单(Popup Menu) :通常通过右键单击鼠标激活。
- 工具栏(Toolbar) :提供对程序功能的快速访问,常与菜单项对应。
- 动作(Action) :允许通过单个对象管理两个或多个不同的组件,常用于菜单和工具栏。

此外,Swing菜单还支持加速键(Accelerator Keys)和助记符(Mnemonics),方便用户通过键盘操作选择菜单项。

2. 核心菜单类

Swing菜单系统由一组相关的类支持,以下是核心菜单类及其描述:
| 类名 | 描述 |
| ---- | ---- |
| JMenuBar | 应用程序顶级菜单的容器 |
| JMenu | 标准菜单,由一个或多个JMenuItem组成 |
| JMenuItem | 填充菜单的对象 |
| JCheckBoxMenuItem | 复选框菜单项 |
| JRadioButtonMenuItem | 单选按钮菜单项 |
| JSeparator | 菜单项之间的视觉分隔线 |
| JPopupMenu | 通常通过右键单击鼠标激活的菜单 |

这些类构成了菜单系统的基础,下面详细介绍其中几个重要的类。

3. JMenuBar类

JMenuBar本质上是菜单的容器,继承自JComponent。它只有一个默认构造函数,初始时菜单栏为空,需要在使用前添加菜单。每个应用程序只有一个菜单栏。

JMenuBar常用的方法如下:
- add(JMenu menu) :将JMenu添加到菜单栏,并返回该菜单的引用。菜单按添加顺序从左到右排列。
- add(Component menu, int idx) :将菜单添加到指定索引位置。
- remove(Component menu) remove(int idx) :移除指定的菜单。
- getMenuCount() :返回菜单栏中包含的菜单数量。

创建并填充菜单栏后,可通过 setJMenuBar(JMenuBar mb) 方法将其添加到JFrame中。

以下是创建和添加菜单栏的示例代码:

// 创建菜单栏
JMenuBar jmb = new JMenuBar();

// 创建菜单
JMenu jmFile = new JMenu("File");
// 添加菜单到菜单栏
jmb.add(jmFile);

// 将菜单栏添加到JFrame
JFrame jfrm = new JFrame("Menu Demo");
jfrm.setJMenuBar(jmb);
4. JMenu类

JMenu封装了一个菜单,由JMenuItem填充。它继承自JMenuItem,这使得一个JMenu可以作为另一个JMenu的子菜单。

JMenu的常用构造函数有:
- JMenu(String name) :创建一个带有指定标题的菜单。
- JMenu() :创建一个无标题的菜单。

JMenu常用的方法如下:
- add(JMenuItem item) add(Component item, int idx) :向菜单中添加菜单项。
- addSeparator() insertSeparator(int idx) :添加分隔线。
- remove(JMenuItem menu) remove(int idx) :移除菜单项。
- getMenuComponentCount() :返回菜单中包含的菜单项数量。
- getMenuComponents() :返回菜单中所有组件的数组。

以下是创建和填充菜单的示例代码:

// 创建菜单
JMenu jmFile = new JMenu("File");

// 创建菜单项
JMenuItem jmiOpen = new JMenuItem("Open");
JMenuItem jmiClose = new JMenuItem("Close");

// 添加菜单项到菜单
jmFile.add(jmiOpen);
jmFile.add(jmiClose);
5. JMenuItem类

JMenuItem封装了菜单中的一个元素,可与程序的某些操作关联,或用于显示子菜单。它继承自AbstractButton,当菜单项被选中时会生成一个动作事件。

JMenuItem的常用构造函数有:
- JMenuItem(String name) :创建一个带有指定名称的菜单项。
- JMenuItem(Icon image) :创建一个显示指定图像的菜单项。
- JMenuItem(String name, Icon image) :创建一个带有指定名称和图像的菜单项。
- JMenuItem(String name, int mnem) :创建一个带有指定名称和助记符的菜单项。
- JMenuItem(Action action) :使用指定的动作信息创建菜单项。

由于菜单项继承自AbstractButton,可使用 setEnabled(boolean enable) 方法启用或禁用菜单项。

以下是创建菜单项的示例代码:

// 创建菜单项
JMenuItem jmiOpen = new JMenuItem("Open");
6. 创建主菜单的步骤

创建主菜单通常需要以下步骤:
1. 创建JMenuBar对象。
2. 构造每个菜单,通常先创建JMenu对象,再添加JMenuItem。
3. 将菜单添加到菜单栏。
4. 将菜单栏添加到JFrame。
5. 为每个菜单项添加动作监听器,处理菜单项被选中时触发的动作事件。

以下是一个创建简单主菜单的示例代码:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

class MenuDemo implements ActionListener {

  JLabel jlab;

  MenuDemo() {
    // 创建JFrame
    JFrame jfrm = new JFrame("Menu Demo");
    jfrm.setLayout(new FlowLayout());
    jfrm.setSize(220, 200);
    jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    // 创建用于显示菜单选择的标签
    jlab = new JLabel();

    // 创建菜单栏
    JMenuBar jmb = new JMenuBar();

    // 创建File菜单
    JMenu jmFile = new JMenu("File");
    JMenuItem jmiOpen = new JMenuItem("Open");
    JMenuItem jmiClose = new JMenuItem("Close");
    JMenuItem jmiSave = new JMenuItem("Save");
    JMenuItem jmiExit = new JMenuItem("Exit");
    jmFile.add(jmiOpen);
    jmFile.add(jmiClose);
    jmFile.add(jmiSave);
    jmFile.addSeparator();
    jmFile.add(jmiExit);
    jmb.add(jmFile);

    // 创建Options菜单
    JMenu jmOptions = new JMenu("Options");
    // 创建Colors子菜单
    JMenu jmColors = new JMenu("Colors");
    JMenuItem jmiRed = new JMenuItem("Red");
    JMenuItem jmiGreen = new JMenuItem("Green");
    JMenuItem jmiBlue = new JMenuItem("Blue");
    jmColors.add(jmiRed);
    jmColors.add(jmiGreen);
    jmColors.add(jmiBlue);
    jmOptions.add(jmColors);
    // 创建Priority子菜单
    JMenu jmPriority = new JMenu("Priority");
    JMenuItem jmiHigh = new JMenuItem("High");
    JMenuItem jmiLow = new JMenuItem("Low");
    jmPriority.add(jmiHigh);
    jmPriority.add(jmiLow);
    jmOptions.add(jmPriority);
    // 创建Reset菜单项
    JMenuItem jmiReset = new JMenuItem("Reset");
    jmOptions.addSeparator();
    jmOptions.add(jmiReset);
    jmb.add(jmOptions);

    // 创建Help菜单
    JMenu jmHelp = new JMenu("Help");
    JMenuItem jmiAbout = new JMenuItem("About");
    jmHelp.add(jmiAbout);
    jmb.add(jmHelp);

    // 为菜单项添加动作监听器
    jmiOpen.addActionListener(this);
    jmiClose.addActionListener(this);
    jmiSave.addActionListener(this);
    jmiExit.addActionListener(this);
    jmiRed.addActionListener(this);
    jmiGreen.addActionListener(this);
    jmiBlue.addActionListener(this);
    jmiHigh.addActionListener(this);
    jmiLow.addActionListener(this);
    jmiReset.addActionListener(this);
    jmiAbout.addActionListener(this);

    // 将标签添加到内容面板
    jfrm.add(jlab);
    // 将菜单栏添加到JFrame
    jfrm.setJMenuBar(jmb);
    // 显示JFrame
    jfrm.setVisible(true);
  }

  // 处理菜单项的动作事件
  public void actionPerformed(ActionEvent ae) {
    String comStr = ae.getActionCommand();
    if (comStr.equals("Exit")) System.exit(0);
    jlab.setText(comStr + " Selected");
  }

  public static void main(String args[]) {
    SwingUtilities.invokeLater(new Runnable() {
      public void run() {
        new MenuDemo();
      }
    });
  }
}
7. 代码分析

上述代码创建了一个简单的主菜单,包含File、Options和Help三个菜单。以下是代码的详细分析:
- 创建JFrame和标签 :创建一个JFrame作为窗口容器,并设置布局管理器、大小和关闭操作。同时创建一个JLabel用于显示菜单选择。
- 创建菜单栏和菜单 :创建JMenuBar对象,然后分别创建File、Options和Help菜单,并添加相应的菜单项和子菜单。
- 添加动作监听器 :为每个菜单项添加动作监听器,处理菜单项被选中时的动作事件。
- 显示JFrame :将标签添加到内容面板,将菜单栏添加到JFrame,最后显示JFrame。

通过以上步骤,我们可以创建一个功能简单的主菜单,并处理菜单项的选择事件。

下面是创建主菜单的流程mermaid图:

graph LR
    A[创建JMenuBar] --> B[构造菜单]
    B --> C[添加菜单到菜单栏]
    C --> D[将菜单栏添加到JFrame]
    D --> E[为菜单项添加动作监听器]

通过这个流程,我们可以清晰地看到创建主菜单的步骤。在实际应用中,可以根据需求进一步扩展和定制菜单系统,例如添加更多的菜单项、子菜单,或者实现更复杂的动作处理逻辑。

Swing菜单系统:创建与使用指南

8. 弹出菜单的创建与使用

除了从菜单栏派生的菜单,还可以创建独立的弹出菜单。创建弹出菜单的步骤如下:
1. 创建 JPopupMenu 对象。
2. 向 JPopupMenu 中添加 JMenuItem
3. 当鼠标在为其定义了弹出菜单的组件上时,通过右键单击激活弹出菜单。

以下是创建和使用弹出菜单的示例代码:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class PopupMenuDemo {
    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            // 创建 JFrame
            JFrame frame = new JFrame("Popup Menu Demo");
            frame.setSize(300, 200);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setLayout(new FlowLayout());

            // 创建弹出菜单
            JPopupMenu popupMenu = new JPopupMenu();
            JMenuItem item1 = new JMenuItem("Item 1");
            JMenuItem item2 = new JMenuItem("Item 2");
            popupMenu.add(item1);
            popupMenu.add(item2);

            // 创建一个面板用于触发弹出菜单
            JPanel panel = new JPanel();
            panel.setPreferredSize(new Dimension(200, 100));
            panel.addMouseListener(new MouseAdapter() {
                @Override
                public void mouseClicked(MouseEvent e) {
                    if (e.getButton() == MouseEvent.BUTTON3) {
                        popupMenu.show(panel, e.getX(), e.getY());
                    }
                }
            });

            frame.add(panel);
            frame.setVisible(true);
        });
    }
}

在上述代码中,首先创建了一个 JPopupMenu 对象,并向其中添加了两个 JMenuItem 。然后创建了一个 JPanel ,并为其添加了鼠标监听器。当鼠标右键单击面板时,弹出菜单将显示在鼠标点击的位置。

9. 菜单中的复选框和单选按钮

除了“标准”菜单项,还可以在菜单中包含复选框和单选按钮。 JCheckBoxMenuItem 用于创建复选框菜单项, JRadioButtonMenuItem 用于创建单选按钮菜单项,这两个类都继承自 JMenuItem ,可以在标准菜单和弹出菜单中使用。

以下是在菜单中使用复选框和单选按钮的示例代码:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class CheckRadioMenuDemo {
    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            JFrame frame = new JFrame("Check and Radio Menu Demo");
            frame.setSize(300, 200);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setLayout(new FlowLayout());

            JMenuBar menuBar = new JMenuBar();
            JMenu menu = new JMenu("Options");

            JCheckBoxMenuItem checkBoxItem = new JCheckBoxMenuItem("Check Box Item");
            JRadioButtonMenuItem radioButtonItem1 = new JRadioButtonMenuItem("Radio Button 1");
            JRadioButtonMenuItem radioButtonItem2 = new JRadioButtonMenuItem("Radio Button 2");

            // 创建按钮组,使单选按钮互斥
            ButtonGroup buttonGroup = new ButtonGroup();
            buttonGroup.add(radioButtonItem1);
            buttonGroup.add(radioButtonItem2);

            menu.add(checkBoxItem);
            menu.addSeparator();
            menu.add(radioButtonItem1);
            menu.add(radioButtonItem2);
            menuBar.add(menu);

            frame.setJMenuBar(menuBar);
            frame.setVisible(true);
        });
    }
}

在上述代码中,创建了一个复选框菜单项和两个单选按钮菜单项,并将两个单选按钮添加到一个 ButtonGroup 中,使它们互斥。

10. 工具栏的使用

JToolBar 用于创建与菜单相关的独立组件,通常用于快速访问应用程序菜单中包含的功能。例如,工具栏可以提供对文字处理器支持的格式化命令的快速访问。

创建和使用工具栏的步骤如下:
1. 创建 JToolBar 对象。
2. 向 JToolBar 中添加按钮或其他组件。
3. 将 JToolBar 添加到 JFrame 或其他容器中。

以下是创建和使用工具栏的示例代码:

import java.awt.*;
import javax.swing.*;

public class ToolBarDemo {
    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            JFrame frame = new JFrame("Tool Bar Demo");
            frame.setSize(300, 200);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setLayout(new BorderLayout());

            JToolBar toolBar = new JToolBar();
            JButton button1 = new JButton("Button 1");
            JButton button2 = new JButton("Button 2");
            toolBar.add(button1);
            toolBar.add(button2);

            frame.add(toolBar, BorderLayout.NORTH);
            frame.setVisible(true);
        });
    }
}

在上述代码中,创建了一个工具栏,并向其中添加了两个按钮,然后将工具栏添加到 JFrame 的顶部。

11. 菜单事件处理

当菜单项被选中时,会生成一个动作事件。默认情况下,与该动作事件关联的动作命令字符串将是所选菜单项的名称。可以通过检查动作命令来确定选择了哪个菜单项,也可以使用单独的匿名内部类或 lambda 表达式来处理每个菜单项的动作事件。

菜单还可以生成其他类型的事件,如 MenuEvent MenuKeyEvent MenuDragMouseEvent PopupMenuEvent 。在很多情况下,只需要关注动作事件。

以下是处理菜单动作事件的示例代码,在前面的 MenuDemo 类中已经有体现,这里再次强调:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

class MenuDemo implements ActionListener {

  JLabel jlab;

  MenuDemo() {
    // ... 前面的代码 ...
    // 为菜单项添加动作监听器
    jmiOpen.addActionListener(this);
    jmiClose.addActionListener(this);
    jmiSave.addActionListener(this);
    jmiExit.addActionListener(this);
    jmiRed.addActionListener(this);
    jmiGreen.addActionListener(this);
    jmiBlue.addActionListener(this);
    jmiHigh.addActionListener(this);
    jmiLow.addActionListener(this);
    jmiReset.addActionListener(this);
    jmiAbout.addActionListener(this);
    // ... 后面的代码 ...
  }

  // 处理菜单项的动作事件
  public void actionPerformed(ActionEvent ae) {
    String comStr = ae.getActionCommand();
    if (comStr.equals("Exit")) System.exit(0);
    jlab.setText(comStr + " Selected");
  }

  public static void main(String args[]) {
    SwingUtilities.invokeLater(new Runnable() {
      public void run() {
        new MenuDemo();
      }
    });
  }
}

在上述代码中, MenuDemo 类实现了 ActionListener 接口,并在 actionPerformed 方法中处理菜单项的动作事件。

12. 总结

Swing 菜单系统提供了丰富的功能和高度的可定制性,能够满足各种应用程序的需求。以下是对 Swing 菜单系统的总结:
| 组件 | 描述 |
| ---- | ---- |
| JMenuBar | 应用程序的主菜单容器,通过 add 方法添加菜单,使用 setJMenuBar 方法添加到 JFrame 中。 |
| JMenu | 标准菜单,可包含菜单项和子菜单,通过 add 方法添加菜单项。 |
| JMenuItem | 菜单中的元素,继承自 AbstractButton ,选中时生成动作事件。 |
| JPopupMenu | 独立的弹出菜单,通过右键单击激活。 |
| JCheckBoxMenuItem JRadioButtonMenuItem | 用于在菜单中添加复选框和单选按钮。 |
| JToolBar | 与菜单相关的独立组件,用于快速访问功能。 |
| JSeparator | 用于在菜单中创建分隔线。 |

通过合理使用这些组件和处理菜单事件,可以创建出功能强大、用户友好的菜单系统。在实际开发中,可以根据具体需求进一步扩展和优化菜单系统,为用户提供更好的交互体验。

下面是一个包含多种组件使用的流程 mermaid 图:

graph LR
    A[创建 JMenuBar] --> B[创建菜单和菜单项]
    B --> C[添加菜单到菜单栏]
    C --> D[将菜单栏添加到 JFrame]
    E[创建 JPopupMenu] --> F[添加菜单项到 JPopupMenu]
    G[创建 JToolBar] --> H[添加按钮到 JToolBar]
    D --> I[为菜单项添加动作监听器]
    F --> J[设置右键激活 JPopupMenu]
    H --> K[将 JToolBar 添加到 JFrame]

这个 mermaid 图展示了创建菜单栏、弹出菜单和工具栏的整体流程,以及为菜单项添加事件监听器的步骤。通过这个图,可以更全面地理解 Swing 菜单系统的使用方法。在实际应用中,可以根据这些步骤和示例代码,灵活构建适合自己应用程序的菜单系统。

洒店管理系统使用说明书 配置源程序 附加数据库SQL Server 2005 (1)将TM\04\Database文件夹中的db_DrinkeryManage_Data.MDF和db_DrinkeryManage_Log.LDF文件拷贝到SQL Server 2005安装路径下的MSSQL.1\MSSQL\Data目录下。 (2)选择开始/程序/Microsoft SQL Server 2005/SQL Server Management Studio项,进入到“连接到服务器”页面,如图1.1所示。 图1.1 连接到服务器 (3)在“服务器名称”下拉列表中选择SQL Server 2005服务器名称,然后单击【连接】按钮。 (4)在“对象资源管理器”中右键单击“数据库”节点,在弹出的菜单中选择“附加”项,弹出“附加数据库”对话框,如图1.2所示。 图1.2 附加数据库 (5)单击【添加】按钮,在弹出的“定位数据库文件”对话框中选择数据库文件路径,如图1.3所示。 图1.3 定位数据库文件 (6)依次单击【确定】按钮,完成数据库附加操作。 发布运行 (1)将光盘\TM\04\DrinkeryManage文件夹拷贝到Eclipse的工作空间中。 (2)启动Eclipse。 (3)选择“文件”/“导入”菜单项,展开“常规”节点,选择“现有项目到工作空间中”子节点,如图1.4所示。 图1.4 “导入”窗口 (4)单击【下一步】按钮,单击【浏览】按钮,选择程序所在目录,然后勾选“将项目复制到工作空间中”复选框,如图1.5所示。 图1.5 “导入”窗口 (5)单击【完成】按钮。 (6)在项目上单击鼠标右键,依次选择“新建”/“文件夹”命令,新建一个“lib”文件夹,然后,将SQL Server 2000数据库驱动文件“msbase.jar、mssqlserver.jar、msutil.jar”拷到该文件夹中。在该文件上单击鼠标右键,选择“构建路径”/“添加至构建路径”命令。 (7)在导入工程的src文件中,找到可执行的主,在该上单击鼠标右键,选择“运行方式”/“Java应用程序”项,如图1.6所示,完成程序配置。 图1.6 选择菜单项 使用说明 系统介绍 酒店管理系统的需求包括开台点菜功能、智能化获取菜品功能、自动结账功能、营业额报表功能等。依据餐饮行业的特点,本系统实现以下目标:  操作简单方便、界面简洁大方。  方便快捷的开台点菜功能。  智能化定位菜品的功能。  快速查看开台点菜信息的功能。  自动结账功能。  按开台和商品实现的日结账功能。  按日消费额汇总统计实现的月结账功能。  按日营业额实现的年结账功能。  系统运行稳定、安全可靠。 操作注意事项 (1)本系统管理员用户名为:Tsoft,密码为:111。 (2)用户首次登录时,需要添加一个新用户,然后,使用添加的用户进行登录。 (3)在结账操作时,如果某一个菜单没有签单或取消签单,那么,先将此菜单进行签单或取消,然后再进行结账。 操作流程 使用本程序时,请按以下步骤操作: (1)用户登录后,进入酒店管理主界面,如图1.7所示。 图1.7 酒店管理系统主界面 (1)单击“用户管理”按钮,对用户信息进行添加及删除操作。 (2)单击“修改密码”按钮,修改当前登录的用户密码操作。 (3)单击“台号管理”按钮,对台号信息进行添加、查询及删除操作。 (4)单击“菜系管理”按钮,对菜系信息进行添加、查询及删除操作。 (5)单击“菜品管理”按钮,对菜品信息进行添加、查询及删除操作。 (6)单击“日结账”按钮,对每天的账单进行查询操作。 (7)单击“月结账”按钮,对每月的账单进行查询操作。 (8)单击“年结账”按钮,对每年的账单进行查询操作。 (9)单击“退出系统”按钮,退出当前操作系统
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值