深入了解 AWT 中的 Menu(菜单)组件

目录

前言

 正文

1. Menu 类

2. 常用的 AWT 菜单类

3. 常用方法

4. 带有快捷键的菜单

5. 子菜单和嵌套菜单

总结

关键点回顾


前言

在 Java 的图形用户界面(GUI)编程中,AWT(Abstract Window Toolkit)是最初的 UI 框架之一,尽管随着 Swing 和 JavaFX 的出现,AWT 的使用相对减少,但它依然是构建基本桌面应用程序的有效工具。在 AWT 中,菜单(Menu) 是构建用户界面的重要元素之一,它允许用户与应用程序进行交互,执行不同的操作。

本篇博客小编将深入探讨 Java AWT 中的菜单组件,讲解其基本概念、常用类、方法以及如何在 Java 应用中实现一个菜单。

 正文

1. Menu 类

Menu 类是 AWT 中的一个组件,代表一个菜单项的集合。每个菜单由多个菜单项(MenuItem)组成,这些菜单项可以执行特定的操作或触发事件。

import java.awt.*;
import java.awt.event.*;

public class MenuExample {
    public static void main(String[] args) {
        // 创建一个 Frame
        Frame frame = new Frame("AWT Menu Example");

        // 创建菜单栏
        MenuBar menuBar = new MenuBar();

        // 创建一个菜单
        Menu fileMenu = new Menu("File");

        // 创建菜单项
        MenuItem openItem = new MenuItem("Open");
        MenuItem saveItem = new MenuItem("Save");
        MenuItem exitItem = new MenuItem("Exit");

        // 向菜单中添加菜单项
        fileMenu.add(openItem);
        fileMenu.add(saveItem);
        fileMenu.add(new MenuItem("-"));  // 添加分隔符
        fileMenu.add(exitItem);

        // 向菜单栏中添加菜单
        menuBar.add(fileMenu);

        // 将菜单栏设置到 Frame
        frame.setMenuBar(menuBar);

        // 为菜单项添加事件监听
        openItem.addActionListener(e -> System.out.println("Open clicked"));
        saveItem.addActionListener(e -> System.out.println("Save clicked"));
        exitItem.addActionListener(e -> System.exit(0));

        // 设置 Frame 的大小和可见性
        frame.setSize(400, 300);
        frame.setVisible(true);
    }
}

2. 常用的 AWT 菜单类

AWT 中提供了多个与菜单相关的类和组件,我们可以用它们来创建功能丰富的菜单。

  • Menu:表示一个菜单,包含多个菜单项。
  • MenuItem:表示菜单中的一个单独项。它可以是一个普通菜单项、复选框菜单项(CheckboxMenuItem)或单选菜单项(RadioMenuItem)。
  • CheckboxMenuItem:表示一个带有勾选框的菜单项。用户可以通过点击勾选或取消勾选来改变状态。
  • RadioMenuItem:表示一个单选菜单项,通常用于一组互斥的选项。
  • MenuBar:表示一个包含多个菜单的菜单栏。一个窗口只能有一个菜单栏。
  • 3. 常用方法

  • add(MenuItem item):将菜单项添加到菜单中。
  • add(Menu menu):将子菜单添加到菜单中。
  • addSeparator():向菜单中添加一个分隔符。
  • setLabel(String label):设置菜单项的标签。
  • setEnabled(boolean enabled):设置菜单项是否可用。
  • setShortcut(KeyEvent key):设置菜单项的快捷键。
  • 4. 带有快捷键的菜单

    Java AWT 支持通过快捷键来触发菜单项的事件。可以使用 MenuItemsetShortcut() 方法为菜单项设置快捷键。

    import java.awt.*;
    import java.awt.event.*;
    
    public class test {
        public static void main(String[] args) {
            Frame frame = new Frame("Menu with Shortcut");
    
            // 创建菜单栏
            MenuBar menuBar = new MenuBar();
    
            // 创建菜单
            Menu fileMenu = new Menu("File");
    
            // 创建菜单项,并设置快捷键
            MenuItem openItem = new MenuItem("Open");
            openItem.setShortcut(new MenuShortcut(KeyEvent.VK_O));
            MenuItem exitItem = new MenuItem("Exit");
            exitItem.setShortcut(new MenuShortcut(KeyEvent.VK_X));
    
            // 添加菜单项到菜单
            fileMenu.add(openItem);
            fileMenu.add(exitItem);
    
            // 将菜单添加到菜单栏
            menuBar.add(fileMenu);
    
            // 设置菜单栏到 Frame
            frame.setMenuBar(menuBar);
    
            // 事件处理
            openItem.addActionListener(e -> System.out.println("Open triggered"));
            exitItem.addActionListener(e -> System.exit(0));
    
            frame.setSize(400, 300);
            frame.setVisible(true);
            frame.addWindowListener(new WindowAdapter() {
                @Override
                public void windowClosing(WindowEvent e) {
                    System.exit(0);
                }
            });
        }
    }
    

    5. 子菜单和嵌套菜单

    Menu 类不仅可以包含多个菜单项,还可以包含其他菜单,形成嵌套的菜单结构。这通常用于创建更复杂的菜单,比如 "文件" 菜单中的 "打开"、"保存" 选项,或 "编辑" 菜单中的 "复制"、"粘贴" 选项。

    import java.awt.*;
    import java.awt.event.*;
    public class Simplemenu {
        Frame fr= new Frame("Simple Menu");
        TextArea ta=new TextArea(20,20);
        MenuBar mb= new MenuBar();//菜单条
        //菜单组件
        Menu file=new Menu("File");
        Menu edit=new Menu("Edit");
        Menu help=new Menu("Help");
        Menu format=new Menu("Format");
        //菜单项
        MenuItem open=new MenuItem("Open");
        MenuItem save=new MenuItem("Save");
        MenuItem exit=new MenuItem("Exit");
        MenuItem cut=new MenuItem("Cut");
        MenuItem copy=new MenuItem("Copy",new MenuShortcut(KeyEvent.VK_C));
        MenuItem paste=new MenuItem("Paste");
        MenuItem about=new MenuItem("About");
        MenuItem comment=new MenuItem("Comment");
        MenuItem cancel=new MenuItem("cancel");
        public Simplemenu(){
            fr.add(ta);
            fr.setMenuBar(mb);
            mb.add(file);
            mb.add(edit);
            mb.add(help);
            file.add(open);
            file.add(save);
            file.add(exit);
            edit.add(cut);
            edit.add(copy);
            edit.add(paste);
            format.add(comment);
            format.add(cancel);
            edit.add(format);
            help.add(about);
            fr.pack();
            fr.setVisible(true);
            fr.addWindowListener(new WindowAdapter() {
                @Override
                public void windowClosing(WindowEvent e) {
                    System.exit(0);
                }
            });
            copy.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    ta.selectAll();
                    ta.append("Copy");
                }
            });
        }
        public static void main(String[] args) {
           new Simplemenu();
        }
    
    }
    

    总结

    在 Java AWT 中,MenuMenuItem 是构建菜单的核心组件。你可以通过组合多个菜单项来创建丰富的菜单结构,并为这些菜单项添加事件监听器以响应用户操作。AWT 提供了简单而灵活的方式来创建菜单,帮助开发者构建交互式桌面应用程序。

    关键点回顾

  • Menu 是菜单的容器,包含多个 MenuItem
  • MenuItem 是菜单中的单个选项。
  • CheckboxMenuItemRadioMenuItem 提供了复选框和单选框功能。
  • MenuBar 是菜单栏,包含一个或多个 Menu
  • 可以通过快捷键、子菜单、分隔符等增强菜单的功能。
  • 作者:禁默

    物联沃分享整理
    物联沃-IOTWORD物联网 » 深入了解 AWT 中的 Menu(菜单)组件

    发表回复