Java GUI编程菜单组件实例详解


Posted in Java/Android onApril 07, 2022

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

Java GUI编程菜单组件实例详解

下表中给出常见的菜单相关组件:

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

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

Java GUI编程菜单组件实例详解

菜单相关组件使用:

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);

案例1:

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

Java GUI编程菜单组件实例详解

演示代码1:

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();
    }
}

案例2:

​通过PopupMenu实现下图效果:

Java GUI编程菜单组件实例详解

实现思路:

1.创建PopubMenu菜单组件;

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

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

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

演示代码2:

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();
    }
}

公众号本文地址:https://mp.weixin.qq.com/s/wTmc9O0aDtf_NPSis37-2A

到此这篇关于Java GUI编程菜单组件实例详解的文章就介绍到这了,更多相关Java GUI编程菜单内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Java/Android 相关文章推荐
SpringAop日志找不到方法的处理
Jun 21 Java/Android
springBoot基于webSocket实现扫码登录
Jun 22 Java/Android
Spring Boot 实现敏感词及特殊字符过滤处理
Jun 29 Java/Android
SpringBoot整合JWT的入门指南
Jun 29 Java/Android
Springboot使用Spring Data JPA实现数据库操作
Jun 30 Java/Android
mybatis 解决从列名到属性名的自动映射失败问题
Jun 30 Java/Android
Java 实战项目之家居购物商城系统详解流程
Nov 11 Java/Android
Android基于Fresco实现圆角和圆形图片
Apr 01 Java/Android
Java 通过手写分布式雪花SnowFlake生成ID方法详解
Apr 07 Java/Android
详细介绍Java中的CyclicBarrier
Apr 13 Java/Android
SpringBoot使用AOP实现统计全局接口访问次数详解
Jun 16 Java/Android
java获取一个文本文件的编码(格式)信息
Sep 23 Java/Android
Flutter集成高德地图并添加自定义Maker的实践
Apr 07 #Java/Android
详解Flutter和Dart取消Future的三种方法
Apr 07 #Java/Android
java如何实现获取客户端ip地址的示例代码
Apr 07 #Java/Android
Android Flutter实现3D动画效果示例详解
Apr 07 #Java/Android
Android Flutter实现图片滑动切换效果
MyBatis配置文件解析与MyBatis实例演示
Java 深入探究讲解简单工厂模式
You might like
Pain 全世界最小最简单的PHP模板引擎 (普通版)
2011/10/23 PHP
解析Extjs与php数据交互(增删查改)
2013/06/25 PHP
去除php注释和去除空格函数分享
2014/03/13 PHP
PHP统计数值数组中出现频率最多的10个数字的方法
2015/04/20 PHP
PHP支付宝当面付2.0代码
2018/12/21 PHP
通过PHP的Wrapper无缝迁移原有项目到新服务的实现方法
2020/04/02 PHP
小型js框架veryide.librar源代码
2009/03/05 Javascript
理解Javascript_15_作用域分配与变量访问规则,再送个闭包
2010/10/20 Javascript
jQuery中 delegate使用的问题
2015/07/03 Javascript
onclick和onblur冲突问题的快速解决方法
2016/04/28 Javascript
用nodejs实现json和jsonp服务的方法
2017/08/25 NodeJs
JS一个简单的注册页面实例
2017/09/05 Javascript
Vue 2.0学习笔记之Vue中的computed属性
2017/10/16 Javascript
微信小程序简单实现form表单获取输入数据功能示例
2017/11/30 Javascript
AngularJS下$http服务Post方法传递json参数的实例
2018/03/29 Javascript
学习LayUI时自研的表单参数校验框架案例分析
2019/07/29 Javascript
微信小程序自定义模态弹窗组件详解
2019/12/24 Javascript
JS如何操作DOM基于表格动态展示数据
2020/10/15 Javascript
python获得两个数组交集、并集、差集的方法
2015/03/27 Python
Python assert关键字原理及实例解析
2019/12/13 Python
Python通过两个dataframe用for循环求笛卡尔积
2020/04/29 Python
Scrapy实现模拟登录的示例代码
2021/02/21 Python
详解css3 Transition属性(平滑过渡菜单栏案例)
2017/09/05 HTML / CSS
Avène雅漾美国官方网站:敏感肌肤护理专家
2016/10/24 全球购物
Marmot土拨鼠官网:美国专业户外运动品牌
2018/01/11 全球购物
Ashford台湾:以折扣价提供奢华的男女用表款
2019/12/04 全球购物
乌克兰排名第一的在线旅游超市:Farvater.Travel
2020/01/02 全球购物
高中毕业生自我鉴定
2013/11/03 职场文书
大学理论知识学习自我鉴定
2014/04/28 职场文书
2014年学习厉行节约反对浪费思想汇报
2014/09/10 职场文书
2015年大学元旦晚会活动策划书
2014/12/09 职场文书
英语教师个人总结
2015/02/09 职场文书
Nginx已编译的nginx-添加新模块
2021/04/01 Servers
mysql在项目中怎么选事务隔离级别
2021/05/25 MySQL
Unity连接MySQL并读取表格数据的实现代码
2021/06/20 MySQL
Python Pandas数据分析之iloc和loc的用法详解
2021/11/11 Python