【Java AWT 图形界面编程】菜单组件 ③ ( PopupMenu 菜单组件实现步骤 | 使用 MouseAdapter 设置事件监听器 | 代码示例 )
2023-06-13 09:18:10 时间
文章目录
一、PopupMenu 菜单组件实现步骤
1、实现步骤
PopupMenu 菜单组件实现步骤 :
- 首先 , 创建 PopupMenu 菜单组件 , 并添加到窗口中 ;
// 创建右键触发的 PopupMenu 菜单组件
PopupMenu popupMenu = new PopupMenu();
frame.add(popupMenu);
- 然后 , 创建 若干 MenuItem 菜单项 , 并将这些菜单项添加到 PopupMenu 菜单组件 中 ;
MenuItem menuItem10 = new MenuItem("复制");
popupMenu.add(menuItem10);
MenuItem menuItem11 = new MenuItem("粘贴");
popupMenu.add(menuItem11);
MenuItem menuItem12 = new MenuItem("保存");
popupMenu.add(menuItem12);
- 再后 , 将 PopupMenu 菜单组件 添加到 Frame 窗口 中 ;
frame.add(popupMenu);
- 最后 , 为指定的布局 , 如 : Frame 窗口 , 注册鼠标右键点击监听事件 , 当监听到用户右键点击鼠标 , 弹出 PopupMenu 菜单组件 ;
frame.addMouseListener(new MouseAdapter() {
@Override
public void mouseReleased(MouseEvent e) {
super.mouseReleased(e);
// 是否右键触发了菜单栏
boolean flag = e.isPopupTrigger();
if (flag) {
popupMenu.show(frame, e.getX(), e.getY());
}
}
});
2、使用 MouseAdapter 设置弹出右键菜单事件监听器
如果要添加一个鼠标监听器 , 需要实现 5 个抽象方法 ;
new MouseListener(){
@Override
public void mouseClicked(MouseEvent e) {
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
};
使用 MouseAdapter , 该类已经实现了上述 5 个抽象函数对应的空方法 , 这里只需要重写感兴趣的方法即可 , 此处只重写 public void mouseReleased(MouseEvent e)
函数 ;
frame.addMouseListener(new MouseAdapter() {
@Override
public void mouseReleased(MouseEvent e) {
super.mouseReleased(e);
// 是否右键触发了菜单栏
boolean flag = e.isPopupTrigger();
if (flag) {
popupMenu.show(frame, e.getX(), e.getY());
}
}
});
二、代码示例
代码示例 :
import java.awt.*;
import java.awt.event.*;
public class MenuExample {
public static void main(String[] args) {
Frame frame = new Frame("菜单示例");
// I. 顶部菜单栏
// 创建菜单栏并添加到 Frame 对象中
MenuBar menuBar = new MenuBar();
frame.setMenuBar(menuBar);
// 创建菜单并添加到菜单栏中
Menu menu = new Menu("文件");
menuBar.add(menu);
// 创建菜单项并添加到菜单中
MenuItem menuItem = new MenuItem("打开");
// 为菜单项添加 ActionListener 监听器
menuItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// 在此处添加要执行的操作
System.out.println("打开文件");
}
});
menu.add(menuItem);
MenuItem menuItem2 = new MenuItem("保存");
menu.add(menuItem2);
MenuItem menuItem3 = new MenuItem("另存为");
menu.add(menuItem3);
// 创建菜单并添加到菜单栏中
Menu menu2 = new Menu("编辑");
menuBar.add(menu2);
// 创建菜单项并添加到菜单中
MenuItem menuItem4 = new MenuItem("自动换行");
menu2.add(menuItem4);
MenuItem menuItem5 = new MenuItem("复制");
menu2.add(menuItem5);
MenuItem menuItem6 = new MenuItem("粘贴");
menu2.add(menuItem6);
MenuItem menuItem7 = new MenuItem("-");
menu2.add(menuItem7);
// 菜单组件 放入 菜单组件
Menu menu3 = new Menu("格式");
menu2.add(menu3);
MenuItem menuItem8 = new MenuItem("注释", new MenuShortcut(KeyEvent.VK_Q, true));
menu3.add(menuItem8);
// 为菜单项添加 ActionListener 监听器
menuItem8.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("注释");
}
});
MenuItem menuItem9 = new MenuItem("取消注释");
menu3.add(menuItem9);
// II. 右键菜单栏
// 创建右键触发的 PopupMenu 菜单组件
PopupMenu popupMenu = new PopupMenu();
frame.add(popupMenu);
MenuItem menuItem10 = new MenuItem("复制");
popupMenu.add(menuItem10);
MenuItem menuItem11 = new MenuItem("粘贴");
popupMenu.add(menuItem11);
MenuItem menuItem12 = new MenuItem("保存");
popupMenu.add(menuItem12);
// 创建事件监听器
ActionListener actionListener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("点击了 : " + e.getActionCommand());
}
};
// 为菜单项添加事件监听器
menuItem10.addActionListener(actionListener);
menuItem11.addActionListener(actionListener);
menuItem12.addActionListener(actionListener);
frame.addMouseListener(new MouseAdapter() {
@Override
public void mouseReleased(MouseEvent e) {
super.mouseReleased(e);
// 是否右键触发了菜单栏
boolean flag = e.isPopupTrigger();
if (flag) {
popupMenu.show(frame, e.getX(), e.getY());
}
}
});
frame.setSize(300, 200);
frame.setVisible(true);
}
}
展示效果 :
相关文章
- 半小时实现Java手撸Http协议,爽!!(附完整源码,建议收藏)「建议收藏」
- 二级java程序设计--Java SDK6.0的下载和操作[通俗易懂]
- java 怎样卸载一个类_Java 动态卸载类[通俗易懂]
- java输入输出流实例代码
- java 除法取商_java除法怎样取小数部分「建议收藏」
- 手机java程序_2020年最流行的Java开发技术
- Java后台接收参数出现java.lang.Integer cannot be cast to java.lang.Double错误(已解决)[通俗易懂]
- 【说站】java委托事件模型的使用
- java通过jdbc连接sql server数据库_mysqljdbc连接数据库代码
- JAVA string转map_java怎么转业务
- JAVA生成uuid_java接口default方法
- java解释器虚拟机-Java代码如何运行在Java虚拟机中
- IntelliJ IDEA 2022.3.3 for Mac(好用的Java开发工具)
- java的ioc
- 在Linux中查看Java线程:一种方法(linux查看java线程)
- Java NIO(2):NIO概述详解编程语言
- 使用Redis和Java实现过期功能(redisjava过期)
- MacOS下Java开发环境搭建指南(macos开发java)
- 时间Java操作Redis实现设置过期时间(redisjava过期)
- Java实现MySQL数据插入(java插入mysql)
- Linux系统中下载Java的方法(linux下java下载)
- java打印当前方法名示例分享
- java开发gui教程之jframe监听窗体大小变化事件和jframe创建窗体
- java将图片分割为几个部分示例