弹出菜单的创建与使用
来源:互联网 发布:云服务器mysql数据库 编辑:程序博客网 时间:2024/06/07 22:47
-------------siwuxie095
工程名:TestSwingPopupMenu
包名:com.siwuxie095.popupmenu
类名:MyFrame.java
工程结构目录如下:
MyFrame.java:
package com.siwuxie095.popupmenu;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.EventQueue;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JSeparator;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.border.EmptyBorder;
import com.sun.java.swing.plaf.windows.WindowsLookAndFeel;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JRadioButtonMenuItem;
public class MyFrameextends JFrame {
private JPanel contentPane;
JPopupMenu popupMenu;
/**
* Launch the application.
*/
public staticvoid main(String[] args) {
EventQueue.invokeLater(new Runnable() {
publicvoid run() {
try {
MyFrame frame =new MyFrame();
frame.setVisible(true);
}catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public MyFrame() {
//设定成 Windows 样式的 LookAndFeel
try {
UIManager.setLookAndFeel(new WindowsLookAndFeel());
}catch (UnsupportedLookAndFeelException e) {
e.printStackTrace();
}
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100,100, 450,300);
contentPane =new JPanel();
contentPane.setBorder(new EmptyBorder(5,5, 5,5));
setContentPane(contentPane);
contentPane.setLayout(new BorderLayout(0,0));
//手动为 contentPane 添加鼠标点击事件:鼠标左键点击弹框
contentPane.addMouseListener(new MouseAdapter() {
@Override
publicvoid mouseClicked(MouseEvent e) {
//指明调用者,显示弹框的 X Y 坐标即点击的位置
popupMenu.show(MyFrame.this, e.getX(), e.getY());
}
});
//将 popupMenu 的声明转移到类中
popupMenu =new JPopupMenu();
//可以将 JPopupMenu 添加到 contentPane中,也可以不添加
//将下面的 addPopup() 注释掉即不添加
addPopup(contentPane, popupMenu);
JMenuItem mntmX =new JMenuItem("X");
popupMenu.add(mntmX);
JMenuItem mntmY =new JMenuItem("Y");
popupMenu.add(mntmY);
JMenuItem mntmZ =new JMenuItem("Z");
popupMenu.add(mntmZ);
//分隔线,可以使用代码手动实现,
//也可以使用控件(组件) JSeparator 拖动实现
JSeparator separator =new JSeparator();
popupMenu.add(separator);
JMenu mnNum =new JMenu("Num");
popupMenu.add(mnNum);
JMenuItem menuItem =new JMenuItem("1");
mnNum.add(menuItem);
JMenuItem menuItem_1 =new JMenuItem("2");
mnNum.add(menuItem_1);
JMenuItem menuItem_2 =new JMenuItem("3");
mnNum.add(menuItem_2);
JSeparator separator_1 =new JSeparator();
popupMenu.add(separator_1);
JMenuItem mntmClose =new JMenuItem("Close");
//对菜单项:Close添加 actionPerformed事件
//点击 Close 关闭程序(注意:添加鼠标点击事件无效)
mntmClose.addActionListener(new ActionListener() {
publicvoid actionPerformed(ActionEvent e) {
System.exit(0);
}
});
JCheckBoxMenuItem chckbxmntmC1 =new JCheckBoxMenuItem("C1");
chckbxmntmC1.setSelected(true);
popupMenu.add(chckbxmntmC1);
JCheckBoxMenuItem chckbxmntmC2 =new JCheckBoxMenuItem("C2");
popupMenu.add(chckbxmntmC2);
JRadioButtonMenuItem rdbtnmntmR1 =new JRadioButtonMenuItem("R1");
rdbtnmntmR1.setSelected(true);
popupMenu.add(rdbtnmntmR1);
JRadioButtonMenuItem rdbtnmntmR2 =new JRadioButtonMenuItem("R2");
popupMenu.add(rdbtnmntmR2);
popupMenu.add(mntmClose);
}
//这是将 JPopupMenu 添加到 contentPane中,自动生成的代码
private staticvoid addPopup(Component component,final JPopupMenu popup) {
component.addMouseListener(new MouseAdapter() {
//鼠标右键点击弹框
publicvoid mousePressed(MouseEvent e) {
if (e.isPopupTrigger()) {
showMenu(e);
}
}
//鼠标右键点击弹框
publicvoid mouseReleased(MouseEvent e) {
if (e.isPopupTrigger()) {
showMenu(e);
}
}
privatevoid showMenu(MouseEvent e) {
popup.show(e.getComponent(), e.getX(), e.getY());
}
});
}
}
将窗体JFrame 的 LookAndFeel 设定为 Windows
向窗体 JFrame 添加一个 JPopupMenu
添加完成,注意:JPopupMenu 添加在 contentPane 内
也可以到Source 中将 JPopupMenu 设定为不放在 contentPane 中
需要为JPopupMenu 添加元素
(1)添加 JMenu 和 JMenuItem
JMenu 是一个菜单,而 JMenuItem 是一个菜单元素(菜单项)
每一个JMenu 可以包含 JMenu 和 JMenuItem,即 可以有子菜单
(2)添加 JCheckBoxMenuItem 和 JRadioButtonMenuItem
JCheckBoxMenuItem 是复选框组成的菜单项,其 selected 属性可以设置默认勾选项
「当对元素(菜单项)的状态进行设定时需要用到复选框」
JRadioButtonMenuItem 是单选按钮组成的菜单项,其 selected 属性可以设置默认勾选项
需要将JRadioButtonMenuItem 添加到 ButtonGroup,才能实现单选
「ButtonGroup 本身不是控件(组件),不能放到容器中,且不可视」
(3)添加分隔线:可以通过控件(组件) JSeparator实现菜单栏的分隔
(4)当弹出菜单创建完毕后,还可以设定其字体、对齐方式、图标等,
还要对具体的菜单项指定动作(添加actionPerformed 事件)
如:为Close 菜单项添加 actionPerformed 事件,当点击 Close 时,关闭程序
运行程序:
【made by siwuxie095】
- 弹出菜单的创建与使用
- 弹出菜单PopupWindow的使用
- 弹出菜单PopupMenu的使用
- 弹出菜单 PopupMenu 的使用
- MFC右键弹出菜单的创建
- 创建弹出菜单
- CMenu创建弹出菜单
- 创建弹出菜单
- QT 创建弹出菜单
- 创建弹出菜单
- Android中关于menu(菜单)的创建与使用
- 关于UIMenuController的使用 弹出菜单UIMenuItem
- 关于UIMenuController的使用 弹出菜单UIMenuItem
- android meun 菜单的使用(长按弹出菜单)
- 安卓菜单的使用系列5:显示弹出菜单
- 【Android】创建Popwindow弹出菜单
- 教你如何创建类似QQ的android弹出菜单
- 如何自定义创建windows的右键弹出菜单(C++)
- 练习
- Java中的构造方法
- python基础知识之逗号输出、赋值
- python写map,reduce访问集群文件
- Activity启动流程分析
- 弹出菜单的创建与使用
- 在Mac下启动Tomcat
- Java中成员变量和局部变量
- 螺旋方阵——递归
- Rational Rose学习笔记
- 010在网页里动态加载JavaScript
- GPUImage的集成步骤
- 内部类,匿名类
- React-Native-ListView、ListViewItem(子、父组件互相传值)