AWT的菜单组件

AWT的菜单组件

  • 前言
  • 一、菜单组件的介绍
    • 常见的菜单相关组件
    • 常见菜单相关组件集成体系图
    • 菜单相关组件使用
    • 小要点
  • 二、AWT菜单组件的代码示例
    • 示例一
    • 示例二
      • 实现思路


前言

推荐一个网站给想要了解或者学习人工智能知识的读者,这个网站里内容讲解通俗易懂且风趣幽默,对我帮助很大。我想与大家分享这个宝藏网站,请点击下方链接查看。
https://www.captainbed.cn/f1

AWT的菜单组件是Java图形用户界面(GUI)中用于创建菜单结构的组件,包括菜单栏、菜单和菜单项等,提供用户交互的便捷方式。

前面文章讲解了如果构建GUI界面,其实就是把一些GUI的组件,按照一定的布局放入到容器中展示就可以了。在实际开发中,除了主界面,还有一类比较重要的内容就是菜单相关组件,可以通过菜单相关组件很方便的使用特定的功能,在AWT中,菜单相关组件的使用和之前学习的组件是一模一样的,只需要把菜单条、菜单、菜单项组合到一起,按照一定的布局,放入到容器中即可。


一、菜单组件的介绍

在这里插入图片描述

常见的菜单相关组件

菜单组件名称功能
MenuBar菜单条 , 菜单的容器 。
Menu菜单组件 , 菜单项的容器 。 它也是Menultem的子类 ,所以可作为菜单项使用
PopupMenu上下文菜单组件(右键菜单组件)
Menultem菜单项组件 。
CheckboxMenuItem复选框菜单项组件

常见菜单相关组件集成体系图

在这里插入图片描述

菜单相关组件使用

  1. 准备菜单项组件,这些组件可以是MenuItem及其子类对象

  2. 准备菜单组件Menu或者PopupMenu(右击弹出子菜单),把第一步中准备好的菜单项组件添加进来;

  3. 准备菜单条组件MenuBar,把第二步中准备好的菜单组件Menu添加进来;

  4. 把第三步中准备好的菜单条组件添加到窗口对象中显示。

小要点

  1. 如果要在某个菜单的菜单项之间添加分割线,那么只需要调用Menu的add(new MenuItem(-))即可。

  2. 如果要给某个菜单项关联快捷键功能,那么只需要在创建菜单项对象时设置即可,例如给菜单项关联 ctrl+shif+/ 快捷键,只需要:new MenuItem("菜单项名字",new MenuShortcut(KeyEvent.VK_Q,true);

二、AWT菜单组件的代码示例

示例一

​ 使用awt中常用菜单组件,完成下图效果

在这里插入图片描述

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class SimpleMenu {
    //创建窗口
    private Frame frame = new Frame("这里测试菜单相关组件");
    //创建菜单条组件
    private MenuBar menuBar = new MenuBar();
    //创建文件菜单组件
    private Menu fileMenu = new Menu("文件");
    //创建编辑菜单组件
    private Menu editMenu = new Menu("编辑");
    //创建新建菜单项
    private MenuItem newItem = new MenuItem("新建");
    //创建保存菜单项
    private MenuItem saveItem = new MenuItem("保存");
    //创建退出菜单项
    private MenuItem exitItem = new MenuItem("退出");

    //创建自动换行选择框菜单项
    private CheckboxMenuItem autoWrap = new CheckboxMenuItem("自动换行");

    //创建复制菜单项
    private MenuItem copyItem = new MenuItem("复制");

    //创建粘贴菜单项
    private MenuItem pasteItem = new MenuItem("粘贴");

    //创建格式菜单
    private Menu formatMenu = new Menu("格式");

    //创建注释菜单项
    private MenuItem commentItem = new MenuItem("注释");
    //创建取消注释菜单项
    private MenuItem cancelItem = new MenuItem("取消注释");

    //创建一个文本域
    private TextArea ta = new TextArea(6, 40);

    public void init(){


        //定义菜单事件监听器
        ActionListener listener = new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                String command = e.getActionCommand();
                ta.append("单击“"+command+"”菜单\n");
                if (command.equals("退出")){
                    System.exit(0);
                }
            }
        };

        //为注释菜单项和退出菜单项注册监听器
        commentItem.addActionListener(listener);
        exitItem.addActionListener(listener);

        //为文件菜单fileMenu添加菜单项
        fileMenu.add(newItem);
        fileMenu.add(saveItem);
        fileMenu.add(exitItem);

        //为编辑菜单editMenu添加菜单项
        editMenu.add(autoWrap);
        editMenu.add(copyItem);
        editMenu.add(pasteItem);

        //为格式化菜单formatMenu添加菜单项
        formatMenu.add(commentItem);
        formatMenu.add(cancelItem);

        //将格式化菜单添加到编辑菜单中,作为二级菜单
        editMenu.add(new MenuItem("-"));
        editMenu.add(formatMenu);


        //将文件菜单和编辑菜单添加到菜单条中
        menuBar.add(fileMenu);
        menuBar.add(editMenu);


        //把菜单条设置到frame窗口上
        frame.setMenuBar(menuBar);

        //把文本域添加到frame中
        frame.add(ta);

        //设置frame最佳大小并可见
        frame.pack();
        frame.setVisible(true);
    }


    public static void main(String[] args) {
        new SimpleMenu().init();
    }
}

这段代码是一个简单的菜单应用程序,利用AWT库创建一个窗口,并在窗口中添加菜单组件和文本域组件。

在代码中,首先定义了一个名为SimpleMenu的类,该类有一个init()方法用于初始化窗口和菜单。在init()方法中,创建了窗口、菜单条、菜单项和文本域等组件,并将它们添加到窗口中。

在菜单相关的代码中,创建了文件菜单(fileMenu)和编辑菜单(editMenu),并在每个菜单中添加了相应的菜单项。其中,文件菜单中包括新建、保存和退出菜单项,编辑菜单中包括自动换行选择框菜单项、复制和粘贴菜单项,以及一个格式化菜单(formatMenu)作为编辑菜单的子菜单,其中包括注释和取消注释菜单项。

接下来,创建了一个菜单事件监听器(listener),用于处理菜单项的点击事件。在监听器中,根据点击的菜单项的动作命令(actionCommand),输出相应的信息,并在点击退出菜单项时退出程序。

最后,将菜单条(menuBar)添加到窗口中,并将文本域(ta)添加到窗口中显示。设置窗口的大小并可见。

在main()方法中,创建了SimpleMenu对象,并调用init()方法初始化窗口和菜单。执行程序时,会显示一个带有菜单的窗口,并可以在菜单中进行相应的操作。

示例二

​ 通过PopupMenu实现下图效果:
在这里插入图片描述

实现思路

  1. 创建PopubMenu菜单组件;

  2. 创建多个MenuItem菜单项,并添加到PopupMenu中;

  3. 将PopupMenu添加到目标组件中;

  4. 为需要右击出现PopubMenu菜单的组件,注册鼠标监听事件,当监听到用户释放右键时,弹出菜单。

import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

public class PopupMenuTest {

    private Frame frame = new Frame("这里测试PopupMenu");

    //创建PopubMenu菜单
    private PopupMenu popupMenu = new PopupMenu();

    //创建菜单条

    private MenuItem commentItem = new MenuItem("注释");
    private MenuItem cancelItem = new MenuItem("取消注释");
    private MenuItem copyItem = new MenuItem("复制");
    private MenuItem pasteItem = new MenuItem("保存");


    //创建一个文本域
    private TextArea ta = new TextArea("我爱中华!!!", 6, 40);

    //创建一个Panel
    private  Panel panel = new Panel();

    public void init(){

        //把菜单项添加到PopupMenu中
        popupMenu.add(commentItem);
        popupMenu.add(cancelItem);
        popupMenu.add(copyItem);
        popupMenu.add(pasteItem);

        //设置panel大小
        panel.setPreferredSize(new Dimension(300,100));

        //把PopupMenu添加到panel中
        panel.add(popupMenu);

        //为panel注册鼠标事件
        panel.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseReleased(MouseEvent e) {
                boolean flag = e.isPopupTrigger();
                //判断当前鼠标操作是不是触发PopupMenu的操作
                if (flag){
                    //让PopupMenu显示在panel上,并且跟随鼠标事件发生的地方显示
                    popupMenu.show(panel,e.getX(),e.getY());
                }
            }
        });

        //把ta添加到frame中间区域中

        frame.add(ta);

        //把panel添加到frame底部
        frame.add(panel,BorderLayout.SOUTH);

        //设置frame最佳大小,并可视;
        frame.pack();
        frame.setVisible(true);

    }

    public static void main(String[] args) {
        new PopupMenuTest().init();
    }

}

这段代码是一个简单的Java程序,实现了一个带有弹出菜单的窗口。具体的功能如下:

  1. 创建了一个Frame(窗口)对象,并设置标题为"这里测试PopupMenu"。

  2. 创建了一个PopupMenu(弹出菜单)对象。

  3. 创建了四个MenuItem(菜单项)对象,分别为"注释"、“取消注释”、“复制"和"保存”。

  4. 创建了一个TextArea(文本域)对象,初始内容为"我爱中华!!!",大小为6行40列。

  5. 创建了一个Panel(面板)对象。

  6. 将菜单项添加到弹出菜单中。

  7. 设置面板的大小为300x100,并将弹出菜单添加到面板中。

  8. 为面板注册鼠标事件,当鼠标释放时判断是否触发了弹出菜单的操作,如果是,则在面板上显示弹出菜单,并且跟随鼠标事件发生的位置显示。

  9. 将文本域添加到窗口的中间区域。

  10. 将面板添加到窗口的底部。

  11. 设置窗口的最佳大小,并将窗口设置为可见。

  12. 在main方法中创建了一个PopupMenuTest对象,并调用init方法来初始化窗口。

总结一下,这段代码实现了一个带有弹出菜单的窗口,用户可以在文本域上右键点击,弹出一个菜单,可以选择进行注释、取消注释、复制和保存等操作。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/759430.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

pyqt 文件浏览列表视图和图标视图

pyqt 文件浏览列表视图和图标视图 目的效果代码 目的 使用pyqt实现文件浏览列表视图和图标视图,像电脑文件浏览一样。如下图所示。 效果 代码 import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget, QToolBar, QAction, Q…

同元软控受邀出席2024年工业软件与新质生产力创新发展论坛

近日,由广东省工业软件学会主办的“2024年工业软件与新质生产力创新发展论坛”在广州成功举办。同元软控深圳子公司副总经理周胜受邀出席,并作《数智驱动创新,科学计算与系统建模仿真加速新质生产力进化》主题演讲。 本次论坛集结工业软件界…

用pycharm进行python爬虫的步骤

使用 pycharm 进行 python 爬虫的步骤:下载并安装 pycharm。创建一个新项目。安装 requests 和 beautifulsoup 库。编写爬虫脚本,包括获取页面内容、解析 html 和提取数据的代码。运行爬虫脚本。保存和处理提取到的数据。 用 PyCharm 进行 Python 爬虫的…

【日常记录】【JS】SSE 流式传输 ChatGPT 的网络传输模式

文章目录 1、SSE 流式传输2、后端代码3、前端代码5、SSE和WS 对比6、chatgpt SSE的服务端返回的数据参考链接 单工通信是一种单向的通信方式,其中信息只能从发送端传输到接收端,而接收端不能向发送端发送任何信息。在Web开发中,Server-Sent E…

【UML用户指南】-24-对高级行为建模-进程和线程

目录 1、概念 2、主动类 3、通信 4、同步 5、常用建模技术 5.1、对多控制流建模 5.2、对进程间通信建模 在UML中,可以将每一个独立的控制流建模为一个主动对象,它代表一个能够启动控制活动的进程或线程。 进程是一个能与其他进程并发执行的重量级…

chrome.storage.local.set 未生效

之前chrome.storage.local.set 和 get 一直不起作用 使用以下代码运行成功。 chrome.storage.local.set({ pageState: "main" }).then(() > {console.log("Value is set");});chrome.storage.local.get(["pageState"]).then((result) > …

JAVA学习笔记-JAVA基础语法-DAY19-File类、递归

第一章 File类 1.1 概述 java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操作。 1.2 构造方法 public File(String pathname) :通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。public File(St…

〔002〕虚幻 UE5 发送 get、post 请求、读取 json 文件

✨ 目录 ▷ 安装 varest 扩展▷ 开启 varest 扩展▷ 发送 get 请求▷ 发送 post 请求▷ 读取 json 文件 ▷ 安装 varest 扩展 打开 虚幻商城,搜索 varest 关键字进行检索, varest 是一个 api 调用插件,支持 http/https 请求,也支…

【成都活动邀请函】7月6 | PowerData 数字经济-“成都“开源行!

【成都活动邀请函】7月6 | PowerData 数字经济-"成都"开源行! 活动介绍活动信息线上直播扫码报名往期活动回顾专注数据开源,推动大数据发展 活动介绍 九天开出一成都,万户千门入画图。 自古以来,成都便是国家发展的重要…

Linux 安装、配置Tomcat 的HTTPS

Linux 安装 、配置Tomcat的HTTPS 安装Tomcat 这里选择的是 tomcat 10.X ,需要Java 11及更高版本 下载页 ->Binary Distributions ->Core->选择 tar.gz包 下载、上传到内网服务器 /opt 目录tar -xzf 解压将解压的根目录改名为 tomat-10 并移动到 /opt 下, 形成个人…

爬坑之 [‘NODE_ENV‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。]

在package.json中配置如下: 执行npm run dev启动 报错: 实际上, NODE_ENVdevelopment webpack-dev-server 这条脚本会合并为两条命令执行, 分别为: NODE_EVNdevelopment webpack-dev-server 这种写法在cmd中是不被支持的 解决…

==和equals的区别(面试题)

和equals有什么区别 对于基本数据类型,比较的是值是否相等,对于引用类型则是比较的地址是否相等;对于equals来说,基本数据类型没有equals方法,对于引用类型equals比较的是引用对象是否相同 那针对以上结论&#xff0c…

LINUX系统编程:多线程互斥

目录 1.铺垫 2.线程锁接口的认识 静态锁分配 动态锁的分配 互斥量的销毁 互斥量加锁和解锁 3.加锁版抢票 4.互斥的底层实现 1.铺垫 先提一个小场景,有1000张票,现在有4个进程,这四个进程疯狂的去抢这1000张票,看看会发生什…

205.Mit6.S081-实验二 system calls

Lab2:system calls 在上一个实验室中,您使用系统调用编写了一些实用程序。在本实验室中,您将向xv6添加一些新的系统调用,这将帮助您了解它们是如何工作的,并使您了解xv6内核的一些内部结构。您将在以后的实验室中添加更多系统调用…

Spring Cloud Alibaba之负载均衡组件Ribbon

一、什么是负载均衡? (1)概念: 在基于微服务架构开发的系统里,为了能够提升系统应对高并发的能力,开发人员通常会把具有相同业务功能的模块同时部署到多台的服务器中,并把访问业务功能的请求均…

grpc学习golang版( 五、多proto文件示例 )

系列文章目录 第一章 grpc基本概念与安装 第二章 grpc入门示例 第三章 proto文件数据类型 第四章 多服务示例 第五章 多proto文件示例 第六章 服务器流式传输 第七章 客户端流式传输 第八章 双向流示例 文章目录 一、前言二、定义proto文件2.1 公共proto文件2.2 语音唤醒proto文…

简单多状态DP问题

这里写目录标题 什么是多状态DP解决多状态DP问题应该怎么做?关于多状态DP问题的几道题1.按摩师2.打家劫舍Ⅱ3.删除并获得点数4.粉刷房子5.买卖股票的最佳时期含手冷冻期 总结 什么是多状态DP 多状态动态规划(Multi-State Dynamic Programming, Multi-St…

Elasticsearch 第四期:搜索和过滤

序 2024年4月,小组计算建设标签平台,使用ES等工具建了一个demo,由于领导变动关系,项目基本夭折。其实这两年也陆陆续续接触和使用过ES,两年前也看过ES的官网,当时刚毕业半年多,由于历史局限性导…

服务器raid5坏盘-换盘-修复阵列过程

目录 背景原因分析解决步骤名词解释进入raid管理界面换回旧4号,进行import再次更换4号盘 总结 背景 服务器除尘之后文件服务器部分文件不能访问了,部分文件夹内容为空,起初以为是新配置的权限的问题,排查之后发现不仅仅是权限问题 jumpserv…