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() {@Overridepublic 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);//创建一个Panelprivate  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() {@Overridepublic 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.mzph.cn/news/863691.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

springboot汽车租赁管理系统-计算机毕业设计源码08754

目 录 摘 要 第 1 章 引 言 1.1 选题背景和意义 1.2 国内外研究现状 1.3 论文结构安排 第 2 章 系统的需求分析 2.1 系统可行性分析 2.1.1 技术方面可行性分析 2.1.2 经济方面可行性分析 2.1.3 法律方面可行性分析 2.1.4 操作方面可行性分析 2.2 系统功能需求分析…

基于线调频小波变换的非平稳信号分析方法(MATLAB)

信号处理领域学者为了改进小波变换在各时频区间能量聚集性不高的缺点,有学者在小波分析基础上引入调频算子构成了线性调频小波变换,线调频小波一方面继承了小波变换的理论完善性,另一方面用一个新的参数(线调频参数)刻…

Nginx 配置文件

Nginx的配置文件的组成部分: 主配置文件:nginx.conf子配置文件:include conf.d/*.conf 全局配置 nginx 有多种模块 核心模块:是 Nginx 服务器正常运行必不可少的模块,提供错误日志记录 、配置文件解析 、事件驱动机…

46 - 删除重复的电子邮箱(高频 SQL 50 题基础版)

46 - 删除重复的电子邮箱 delete p1 from Person p1,Person p2 where p1.emailp2.email and p1.id>p2.id;

ios13多窗口(UIWindowScene)学习笔记

ios13引入了UIWindowScene类、UIWindowSceneDelegate协议以便支持多窗口功能,但其适用于ipad,不适用于iphone,因为iphone不支持多窗口功能。注意,这里说的窗口不是UIWindow,而是UIWindowScene。 ios13前后的app的UI架…

2024年【建筑电工(建筑特殊工种)】考试试题及建筑电工(建筑特殊工种)模拟考试题库

题库来源:安全生产模拟考试一点通公众号小程序 2024年【建筑电工(建筑特殊工种)】考试试题及建筑电工(建筑特殊工种)模拟考试题库,包含建筑电工(建筑特殊工种)考试试题答案和解析及建筑电工(建筑特殊工种)模拟考试题库练习。安全生产模拟考试一点通结合…

2024年【广东省安全员A证第四批(主要负责人)】新版试题及广东省安全员A证第四批(主要负责人)考试试卷

题库来源:安全生产模拟考试一点通公众号小程序 2024年【广东省安全员A证第四批(主要负责人)】新版试题及广东省安全员A证第四批(主要负责人)考试试卷,包含广东省安全员A证第四批(主要负责人&am…

Go线程实现模型-P

P 概述 P是G能够在M中运行关键。Go的运行时系统会适时地让P与不同的M建立或断开关联,以使P中的那些可运行的G能够及时获得,这与操作系统内核在CPU之上实时切换不同进程或线程的情况类似 改变P的数量 改变单个Go程序间拥有的P的最大数量有两种方法 调…

Android - 利用 jitpack 免费发布闭源 aar

一、简述 目前(Android/java) library 的主要发布仓库有 MavenCentral 和 jitpack,我之前也对这两种仓库的发布流程做了详细介绍: 发布至 MavenCentral: https://juejin.cn/post/6953598441817636900发布至 jitpack: https://juejin.cn/post/7040733114506674183#heading-…

图灵虚拟机配置

导入虚拟机 点击新建,选择虚拟硬盘文件 环境机器.vmdk 配置网络

浅谈区块链

区块链是一种分布式数据库技术,也被称为分布式账本技术。它的本质是一个去中心化的数据库,使用密码学相关联产生的数据块串连而成,用于验证其信息的有效性(防伪)和生成下一个区块。区块链具有“不可伪造”“全程留痕”…

【后端面试题】【中间件】【NoSQL】ElasticSearch索引机制和高性能的面试思路

Elasticsearch的索引机制 Elasticsearch使用的是倒排索引,所谓的倒排索引是相对于正排索引而言的。 在一般的文件系统中,索引是文档映射到关键字,而倒排索引则相反,是从关键字映射到文档。 如果没有倒排索引的话,想找…

001:开源交易系统开发实战开篇

本专栏采用融入【主力思维】的方法学,包含数据抓取、特征模型开发、历史验证回归测试、每日动态风险评估管理等技术,较大的增强股票投资胜率,让IT开发者拥有一套实用的属于自己思路的专用交易软件。 先简要介绍下系统运行的成果和项目架构&a…

不可编辑的加密word文件破解

文章目录 1 将word文件另存为xml格式2 使用记事本打开xml格式的word文件3 ctrlF查找w:enforcement4 将w:enforcement"1"改成w:enforcement"0"并保存5 用word打开xml格式的文件并另存为docx格式6 成功可以编辑 1 将word文件另存为xml格式 2 使用记事本打开x…

双指针-旋转链表

目录 一、问题描述 二、解题思路 三、代码实现 四、刷题链接 一、问题描述 二、解题思路 1.先确定链表长度为len 2.注意当K>len时,如果每个节点都往右移动len个位置,等价于不移动,所以需要求KK%len。 3.所有元素右移K个位置&#xf…

uniapp运行到小程序Vue.use注册全局组件不起作用

真想吐槽一下小程序,uniapp运行到小程序使用Vue.use注册全局组件根本不起作用,也不报错,这只是其中一个问题,其他还有很多问题,比如vue中正常使用的没问题的语法,运行到小程序就不行,又是包太大…

【Python机器学习】自动化特征选择——单变量统计

添加更多特征会使所有的模型变得更加复杂,从而增大过拟合的可能性。 在添加新特征或处理一般的高位数据集时,最好将特征的数量减少到只包含最有用的那些特征,并删除其余特征,这样会得到泛化能力更好、更简单的模型。 对于如何判…

生成式人工智能和机器人技术是否即将取得最后的突破?

了解生成式人工智能与机器人技术的融合如何彻底改变从医疗保健到娱乐等行业 想象一下这样一个世界,机器人可以谱写交响乐、画出杰作、写出小说。这种创造力与自动化的迷人融合,由 生成式人工智能,不再是梦想;它正在以重大方式重塑…

1Panel开源面板项目GitHub Star数量突破20,000!

截至2024年6月25日9:00,FIT2CLOUD飞致云旗下开源项目——1Panel开源Linux服务器运维管理面板GitHub Star数超过20,000个! 继Halo和JumpServer之后,1Panel成为飞致云旗下第三个GitHub Star数量超过20,000个的开源项目,也是飞致云旗…

Python 类

文章目录 定义类与对象成员方法构造方法魔术方法私有成员继承复写父类成员调用父类成员 多态 定义 class 类名:成员变量成员方法变量类名()# 创建对象 变量.成员变量# 使用成员变量 变量.成员方法类与对象 类相当于设计图纸,规定了各种属性与行为。 对象也就是按照…