一、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);
}
}
展示效果 :