弹出菜单是GUI程序中非常常见的一种控件。它通常由鼠标右击事件触发,比如在windows系统桌面上右击时,会弹出一个包含“刷新”、“属性”等菜单的弹出菜单。Swing中的弹出菜单是JPopupMenu,它的基本性质与JMenu类似,可以使用add方法给它内部添加JMenu或者JMenuItem。手动显示JPopupMenu时,需使用show(parentComponent, x, y)方法,指定父控件和显示坐标。用户的操作习惯是在右击某个 控件时显示弹出菜单,那么需要使用component.setComponentPopupMenu(popupMenu)方法来添加该弹出菜单。偶尔会遇到在已经包含弹出菜单的控件内再添加子控件的情况,这时子控件可以使用child.setInheritsPopupMenu(true)来继承该弹出菜单。

下面是JPopupMenu常用方法:

为了练手,我们来模仿实现eclipse中编辑区域的弹出菜单,代码如下:

package Swing;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent; import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.KeyStroke; /*
*模仿实现eclipse中编辑区域的弹出菜单
*/
public class JPopupMenuDemo extends JFrame { JPopupMenu popupMenu; public JPopupMenuDemo(){
JMenuItem menuItem;//用作临时变量 popupMenu = new JPopupMenu();
popupMenu.add(createMenuItem("Undo Typing", null, new ImageIcon("resources\\JPopupMenuDemo\\icon\\undoTyping.png"), KeyStroke.getKeyStroke('Z', InputEvent.CTRL_MASK)));
popupMenu.add(createMenuItem("Revert File", null, null, null));
popupMenu.add(createMenuItem("Save", null, new ImageIcon("resources\\JPopupMenuDemo\\icon\\save.png"), KeyStroke.getKeyStroke('S', InputEvent.CTRL_MASK)));
popupMenu.addSeparator();
popupMenu.add(createMenuItem("Open Declaration", null, null, KeyStroke.getKeyStroke("F3")));
popupMenu.add(createMenuItem("Open Type Hierarchy", null, null, KeyStroke.getKeyStroke("F4")));
popupMenu.add(createMenuItem("Open Call Hierarchy", null, null, KeyStroke.getKeyStroke('H', InputEvent.CTRL_MASK | InputEvent.ALT_MASK)));
popupMenu.add(createMenuItem("Show in Breakcrumb", null, null, KeyStroke.getKeyStroke('B', InputEvent.SHIFT_MASK | InputEvent.ALT_MASK)));
popupMenu.add(createMenuItem("Quick Outline", null, null, KeyStroke.getKeyStroke('O', InputEvent.CTRL_MASK)));
popupMenu.add(createMenuItem("Quick Type Hierarchy", null, null, KeyStroke.getKeyStroke('T', InputEvent.CTRL_MASK)));
popupMenu.add(createMenuNamedOpenWith());
popupMenu.add(createMenuNamedShowIn());
popupMenu.addSeparator();
menuItem = popupMenu.add(createMenuItem("Cut", null, null, KeyStroke.getKeyStroke('X', InputEvent.CTRL_MASK)));
menuItem.setEnabled(false);
menuItem = popupMenu.add(createMenuItem("Copy", null, null, KeyStroke.getKeyStroke('C', InputEvent.CTRL_MASK)));
menuItem.setEnabled(false);
popupMenu.add(createMenuItem("Copy Qualified Name", null, null, null));
popupMenu.add(createMenuItem("Paste", null, null, KeyStroke.getKeyStroke('V', InputEvent.CTRL_MASK)));
popupMenu.addSeparator();
popupMenu.add(createMenuItem("Quick Fix", null, null, KeyStroke.getKeyStroke('1', InputEvent.CTRL_MASK)));
popupMenu.add(createMenuNamedSource());
popupMenu.add(createMenuNamedRefactor());
popupMenu.add(createMenuNamedLocalHistory());
popupMenu.addSeparator();
popupMenu.add(createMenuNamedReferences());
popupMenu.add(createMenuNamedDeclarations());
popupMenu.add(createMenuItem("Add To Snippets", null, new ImageIcon("resources\\JPopupMenuDemo\\icon\\addToSnippets.png"), null));
popupMenu.addSeparator();
popupMenu.add(createMenuNamedDebugAs());
popupMenu.add(createMenuNamedRunAs());
popupMenu.add(createMenuItem("Validate", null, null, null));
popupMenu.add(createMenuNamedTeam());
popupMenu.add(createMenuNamedCompareWith());
popupMenu.add(createMenuNamedReplaceWith());
popupMenu.addSeparator();
popupMenu.add(createMenuItem("Prefrences", null, null, null));
popupMenu.addSeparator();
popupMenu.add(createMenuItem("Remove from Context", null, null, KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, InputEvent.CTRL_MASK | InputEvent.ALT_MASK | InputEvent.SHIFT_MASK))); JPanel panel = new JPanel();
panel.setComponentPopupMenu(popupMenu);
add(panel);
} private JMenu createMenuNamedReplaceWith() {
/*
* * 创建名称为ReplaceWith的menu
*/
JMenu menu = createMenu("Replace With", null);
menu.add(createMenuItem("Local History", null, null, null));
menu.add(createMenuItem("Previous From History", null, null, null)); return menu;
} private JMenu createMenuNamedCompareWith() {
/*
* * 创建名称为CompareWith的menu
*/
JMenu menu = createMenu("Compare With", null);
JMenuItem menuItem = menu.add(createMenuItem("Each Other", null, null, null));
menuItem.setEnabled(false);
menu.add(createMenuItem("Local History", null, null, null)); return menu;
} private JMenu createMenuNamedTeam() {
/*
* * 创建名称为Team的menu
*/
JMenu menu = createMenu("Team", null);
menu.add(createMenuItem("Apply Patch", null, null, null));
menu.add(createMenuItem("Show Local History", null, null, null));
JMenuItem menuItem= menu.add(createMenuItem("Share Project", null, null, null));
menuItem.setEnabled(false);
return menu;
} private JMenu createMenuNamedRunAs() {
/*
* * 创建名称为RunAs的menu
*/
JMenu menu = createMenu("Run As", null);
menu.add(createMenuItem("Java Application", null, new ImageIcon("resources\\JPopupMenuDemo\\icon\\javaApplication.png"),KeyStroke.getKeyStroke('X', InputEvent.ALT_MASK | InputEvent.SHIFT_MASK)));
menu.addSeparator();
menu.add(createMenuItem("Debug Configurations", null, null, null)); return menu;
} private JMenu createMenuNamedDebugAs() {
/*
* * 创建名称为DebugAs的menu
*/
JMenu menu = createMenu("Debug As", null);
menu.add(createMenuItem("Java Application", null, new ImageIcon("resources\\JPopupMenuDemo\\icon\\javaApplication.png"),KeyStroke.getKeyStroke('D', InputEvent.ALT_MASK | InputEvent.SHIFT_MASK)));
menu.addSeparator();
menu.add(createMenuItem("Debug Configurations", null, null, null)); return menu;
} private JMenu createMenuNamedDeclarations() {
/*
* * 创建名称为Declarations的menu
*/
JMenu menu = createMenu("Declarations", null);
menu.add(createMenuItem("workSpace", null, new ImageIcon("resources\\JPopupMenuDemo\\icon\\declarationsIcon.png"),KeyStroke.getKeyStroke('G', InputEvent.CTRL_MASK | InputEvent.SHIFT_MASK)));
menu.add(createMenuItem("Project", null, new ImageIcon("resources\\JPopupMenuDemo\\icon\\declarationsIcon.png"),null));
menu.add(createMenuItem("Hierarchy", null, new ImageIcon("resources\\JPopupMenuDemo\\icon\\declarationsIcon.png"),null));
menu.addSeparator();
menu.add(createMenuItem("WorkingSet", null, new ImageIcon("resources\\JPopupMenuDemo\\icon\\declarationsIcon.png"),null)); return menu;
} private JMenu createMenuNamedReferences() {
/*
* * 创建名称为References的menu
*/
JMenu menu = createMenu("References", null);
menu.add(createMenuItem("workSpace", null, new ImageIcon("resources\\JPopupMenuDemo\\icon\\ReferencesIcon.png"),KeyStroke.getKeyStroke('G', InputEvent.CTRL_MASK | InputEvent.SHIFT_MASK)));
menu.add(createMenuItem("Project", null, new ImageIcon("resources\\JPopupMenuDemo\\icon\\ReferencesIcon.png"),null));
menu.add(createMenuItem("Hierarchy", null, new ImageIcon("resources\\JPopupMenuDemo\\icon\\ReferencesIcon.png"),null));
menu.addSeparator();
menu.add(createMenuItem("WorkingSet", null, new ImageIcon("resources\\JPopupMenuDemo\\icon\\ReferencesIcon.png"),null)); return menu;
} private JMenu createMenuNamedLocalHistory() {
/*
* * 创建名称为LocalHistory的menu
*/
JMenu menu = createMenu("Local History", null);
menu.add(createMenuItem("Compare With", null, null,null));
menu.add(createMenuItem("Replace With Previous", null, null,null));
menu.add(createMenuItem("Replace With", null, null,null));
menu.add(createMenuItem("Restore From", null, null,null)); return menu;
} private JMenu createMenuNamedRefactor() {
/*
* * 创建名称为Refactor的menu
*/
JMenu menu = createMenu("Refactor", null);
menu.add(createMenuItem("Move", null, null,KeyStroke.getKeyStroke('V', InputEvent.SHIFT_MASK | InputEvent.ALT_MASK)));
menu.addSeparator();
menu.add(createMenuItem("Change Method Signature", null, null,KeyStroke.getKeyStroke('C', InputEvent.SHIFT_MASK | InputEvent.ALT_MASK)));
menu.addSeparator();
menu.add(createMenuItem("Extract Interface", null, null,null));
menu.add(createMenuItem("Extract Superclass", null, null,null));
menu.add(createMenuItem("Use Suppertype where Possible", null, null,null));
menu.add(createMenuItem("Pull Up", null, null,null));
menu.add(createMenuItem("Push Down", null, null,null));
menu.addSeparator();
menu.add(createMenuItem("Extract Class", null, null,null));
menu.add(createMenuItem("Introduce Parameter Object", null, null,null));
menu.addSeparator();
menu.add(createMenuItem("Infer Generic Type Arguments", null, null,null)); return menu;
} private JMenu createMenuNamedSource() {
/*
* * 创建名称为Source的menu
*/
JMenu menu = createMenu("Source", null);
menu.add(createMenuItem("Toggle Comment", null, null,KeyStroke.getKeyStroke('/', InputEvent.CTRL_MASK)));
menu.add(createMenuItem("Remove Bolck Comment", null, null,KeyStroke.getKeyStroke('\\', InputEvent.CTRL_MASK | InputEvent.SHIFT_MASK)));
menu.add(createMenuItem("Generate Element Comment", null, null,KeyStroke.getKeyStroke('J', InputEvent.SHIFT_MASK | InputEvent.ALT_MASK)));
menu.addSeparator();
menu.add(createMenuItem("Corrent Indentation", null, null, KeyStroke.getKeyStroke('I', InputEvent.CTRL_MASK)));
menu.add(createMenuItem("Format Element", null, null,null));
menu.add(createMenuItem("Format ", null, null,KeyStroke.getKeyStroke('F', InputEvent.SHIFT_MASK | InputEvent.ALT_MASK)));
menu.addSeparator();
menu.add(createMenuItem("Add Import", null, null,KeyStroke.getKeyStroke('M', InputEvent.CTRL_MASK | InputEvent.SHIFT_MASK)));
menu.add(createMenuItem("Organize Imports", null, null,KeyStroke.getKeyStroke('O', InputEvent.CTRL_MASK | InputEvent.SHIFT_MASK)));
menu.add(createMenuItem("Sort Members", null, null,null));
menu.add(createMenuItem("Clean Up", null, null,null));
menu.addSeparator();
menu.add(createMenuItem("Override/Implement Methods", null, null,null));
menu.add(createMenuItem("Generate Getters and Setters", null, null,null));
menu.add(createMenuItem("Generate Delegate Methods", null, null,null));
menu.add(createMenuItem("Generate hashCode() and equals()", null, null,null));
menu.add(createMenuItem("Generate toString()", null, null,null));
menu.add(createMenuItem("Generate Constructor using Fields", null, null,null));
menu.add(createMenuItem("Generate Constructor from Superclass", null, null,null));
menu.addSeparator();
menu.add(createMenuItem("Externalize Strings", null, null,null)); return menu;
} private JMenu createMenuNamedShowIn() {
/*
* * 创建名称为ShowIn的menu
*/
JMenu menu = createMenu("Show In", null);
menu.add(createMenuItem("Git Repositories", null, new ImageIcon("resources\\JPopupMenuDemo\\icon\\gitRepositories.png"), null));
menu.add(createMenuItem("Package Explorer", null, new ImageIcon("resources\\JPopupMenuDemo\\icon\\packageExplorer.png"), null));
menu.add(createMenuItem("History", null, new ImageIcon("resources\\JPopupMenuDemo\\icon\\history.png"), null));
menu.add(createMenuItem("Navigator", null, new ImageIcon("resources\\JPopupMenuDemo\\icon\\navigator.png"), null));
menu.add(createMenuItem("Project Explorer", null, new ImageIcon("resources\\JPopupMenuDemo\\icon\\projectExplorer.png"), null));
menu.add(createMenuItem("Outline", null, new ImageIcon("resources\\JPopupMenuDemo\\icon\\outline.png"), null));
menu.add(createMenuItem("System Explorer", null, null, null));
menu.add(createMenuItem("Properties", null, new ImageIcon("resources\\JPopupMenuDemo\\icon\\Properties.png"), null));
return menu;
} private JMenu createMenuNamedOpenWith() {
/*
* * 创建名称为OpenWith的menu
*/
JMenu menu = createMenu("Open With", null);
menu.add(createMenuItem("Java Editor", null, new ImageIcon("resources\\JPopupMenuDemo\\icon\\JavaEditor.png"), null));
menu.add(createMenuItem("Text Editor", null, new ImageIcon("resources\\JPopupMenuDemo\\icon\\textEditor.png"), null));
menu.add(createMenuItem("Window Builder Editor", null, new ImageIcon("resources\\JPopupMenuDemo\\icon\\windowBuilderEditor.png"), null));
menu.addSeparator();
menu.add(createMenuItem("System Editor", null, new ImageIcon("resources\\JPopupMenuDemo\\icon\\systemEditor.png"), null));
menu.add(createMenuItem("In-Place Editor", null, new ImageIcon("resources\\JPopupMenuDemo\\icon\\inPlaceEditor.png"), null));
menu.add(createMenuItem("Default Editor", null, null, null));
menu.addSeparator();
menu.add(createMenuItem("Other", null, null, null));
return menu;
} private JMenu createMenu(String name, String mnemonic) {
/*
* 根据名称和快捷键创建menu并添加到menuBar
*/
JMenu menu = new JMenu(name);
if (mnemonic != null)
menu.setMnemonic(mnemonic.toCharArray()[0]);
return menu;
} private JMenuItem createMenuItem(String name, String mnemonic, Icon icon, KeyStroke keyStroke) {
/*
* 根据名称和快捷键创建menu并添加到menuBar
*/
JMenuItem menuItem = new JMenuItem(name, icon);
if (mnemonic != null)
menuItem.setMnemonic(mnemonic.toCharArray()[0]);
if (keyStroke != null)
menuItem.setAccelerator(keyStroke);
return menuItem;
} public static void main(String[] args) {
// TODO Auto-generated method stub
// 创建窗体
JPopupMenuDemo frame = new JPopupMenuDemo();
//指定标题
frame.setTitle("JPopupMenuDemo");
//指定icon
frame.setIconImage(new ImageIcon("resources\\JMenuDemo\\icon\\Eclipse.png").getImage());
// 关闭窗体后退出程序
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 自动适配所有控件大小
frame.setSize(frame.getPreferredSize().width, 200);
//frame.pack();
// 设置窗体位置在屏幕中央
frame.setLocationRelativeTo(null);
// 显示窗体
frame.setVisible(true);
} }

运行效果图1:

运行效果图2:

图标目录:

Swing-JPopupMenu弹出菜单用法-入门的更多相关文章

  1. Web标准:四、纵向导航菜单及二级弹出菜单

    Web标准:四.纵向导航菜单及二级弹出菜单 知识点: 1.纵向列表 2.标签的默认样式 3.css派生选择器 4.css选择器的分组 5.纵向二级列表 6.相对定位和绝对定位   1)纵向列表 可以看 ...

  2. css+html+js实现多级下拉和弹出菜单

    本文将使用css+html+js实现横向菜单.具有多级弹出菜单下拉. 首先我们来看看效果图: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvajkwMzgy ...

  3. 向上弹出菜单jQuery插件

    插件名:柯乐义英文名:Keleyijs文件名称:jquery.keleyi.js插件功能:该插件可以让你轻易地在页面上构建一个向上弹出的二级菜单. 示例查看:http://keleyi.com/kel ...

  4. html5手机端遮罩弹出菜单代码

    效果体验:http://hovertree.com/texiao/html5/17/ 效果图: 代码如下: <!doctype html> <html lang="zh&q ...

  5. DIV+CSS制作二级横向弹出菜单,略简单

    没有使用JavaScript控制二级菜单的显示,结果如上图所示. 代码如下: <!DOCTYPE html> <html> <head> <meta char ...

  6. vc++ 如何添加右键弹出菜单

    一.创建新工程 二.编辑菜单资源 1.添加菜单 按"Ctrl+R",双击"Menu"图标 2.于菜单编辑器内编辑菜单 四.添加代码(红色部分) void CCM ...

  7. 创建 iPhone/iOS8 弹出菜单(窗口)

    基本步骤 添加视图:主视图与弹出视图 关联视图 配置弹出视图 编码实现:弹出菜单样式及控制器委托 override func prepareForSegue(segue: UIStoryboardSe ...

  8. android 单选、多选弹出菜单

    菜单单选窗口: import android.app.Activity;import android.app.AlertDialog;import android.content.DialogInte ...

  9. [Flex] PopUpButton系列 —— 弹出菜单的行高设置

    <?xml version="1.0" encoding="utf-8"?> <!--Flex中如何通过variableRowHeight样式 ...

随机推荐

  1. vcruntime140.dll丢失解决

    之前安装好apache2.4后,打开突然报这样的错误,所以百度一下,发现了问题所在,原因是系统需要安装一个插件,才能正常运行apache2.4 Microsoft Visual C++ 2005 Re ...

  2. 米扑科技的开源项目:sitemap-php 自动生成网站地图

    米扑科技旗下的产品,近期正在做SEO网站优化,其中子需求之一是调研实现了网站地图(sitemap.xml) 封装简化了许多功能模块,现在分享出来,源代码可在Github上下载,有简单的示例. Gith ...

  3. python之----------字符编码具体原理

    1.内存和硬盘都是用来存储的. CPU:速度快 硬盘:永久保存 2.文本编辑器存取文件的原理(nodepad++,pycharm,word) 打开编辑器就可以启动一个进程,是在内存中的,所以在编辑器编 ...

  4. 2017多校第9场 HDU 6169 Senior PanⅡ 数论,DP,爆搜

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6169 题意:给了区间L,R,求[L,R]区间所有满足其最小质数因子为k的数的和. 解法: 我看了这篇b ...

  5. /etc/fstab最后3个字段详解

    /etc/fstab文件的作用就是让挂载的信息在开启的时候生效: 磁盘分区 挂载目录 文件格式 访问方式 fs_dump fs_pass /dev/sdb1 /mnt ext4 defaults   ...

  6. SQL中多条件查询括号的用途

    界面: 代码 0 posted @ 2009-12-15 13:28 唔愛吃蘋果 阅读(8640) 评论(0)  编辑 收藏

  7. mybatis 的逆向工程

    1      逆向工程 1.1  什么是逆向工程 mybaits需要程序员自己编写sql语句,mybatis官方提供逆向工程 可以针对单表自动生成mybatis执行所需要的代码(mapper.Java ...

  8. git 生成公钥、私钥方法与clone使用方法

    我的配置流程 Git配置 Git安装完之后,需做git配置.打开git bash,分别执行以下两句命令 git config --global user.name "用户名" gi ...

  9. Django编写RESTful API(四):认证和权限

    欢迎访问我的个人网站:www.comingnext.cn 前言: 按照前面几篇文章里那样做,使用Django编写RESTful API的基本功能已经像模像样了.我们可以通过不同的URL访问到不同的资源 ...

  10. JavaScript封装一个实用的select控件

    最近一直把精力放在项目上面,导致忽略的一些底层的东西.以前就一直觉得原有的select控件很丑,正好周末有时间,试着做了一个简单封装,实现了它的基本功能.我总结了一下,大概分为三个部分: 1.对显示样 ...