`

swing 右键菜单快捷键

阅读更多
当我们为JTextField 添加右键快捷键时,发现不管用,其实是管用的,不过你的先显示你的菜单,只有当菜单获得了焦点快捷键方有效,但这样就毫无意义了.解决的办法就是将在JTextField上也添加快捷键,下面是一个Demo.

package org.eclipse.ui;

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JFrame;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.JTextField;
import javax.swing.KeyStroke;

/**
 * @author zero
 * 
 */
public class Swing {

	private JFrame frame;
	private JTextField textField;
	private JPopupMenu popupMenu;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					Swing window = new Swing();
					window.frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the application.
	 */
	public Swing() {
		initialize();
	}

	/**
	 * Initialize the contents of the frame.
	 */
	private void initialize() {
		frame = new JFrame();
		frame.setBounds(100, 100, 450, 300);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		textField = new JTextField();
		frame.getContentPane().add(textField, BorderLayout.CENTER);
		textField.setColumns(10);

		Action delAction = new AbstractAction("Delete") {
			private static final long serialVersionUID = 1L;

			@Override
			public void actionPerformed(ActionEvent e) {
				System.out.println("---------del------------");
			}
		};
		popupMenu = new JPopupMenu();
		addPopup(textField, popupMenu);

		JMenuItem mntmAdd = new JMenuItem(delAction);
		mntmAdd.setMnemonic('D');
		mntmAdd.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_D,
				InputEvent.CTRL_MASK));

		fuckAllMenuItems(mntmAdd);
	}

	private void fuckAllMenuItems(JMenuItem... menuItems) {
		for (JMenuItem item : menuItems) {
			popupMenu.add(item);
			Action action = item.getAction();
			Object key = action.getValue(Action.NAME);
			textField.getInputMap().put(item.getAccelerator(), key);
			textField.getActionMap().put(key, action);
		}
	}

	private static void addPopup(Component component, final JPopupMenu popup) {
		component.addMouseListener(new MouseAdapter() {
			public void mousePressed(MouseEvent e) {
				if (e.isPopupTrigger()) {
					showMenu(e);
				}
			}

			public void mouseReleased(MouseEvent e) {
				if (e.isPopupTrigger()) {
					showMenu(e);
				}
			}

			private void showMenu(MouseEvent e) {
				popup.show(e.getComponent(), e.getX(), e.getY());
			}
		});
	}
}

 
分享到:
评论

相关推荐

    java右键菜单源码

    本资源“java右键菜单源码”可能是提供了一个实现这种功能的示例代码库,帮助开发者理解如何在Java Swing或JavaFX中创建和使用右键菜单。 在Java Swing中,右键菜单主要通过JPopupMenu类来实现。下面我们将深入探讨...

    Java弹出菜单,为JTextArea添加了右键弹出式菜单,实现了复制、粘贴、剪切

    今天,我们将学习如何使用 Java 弹出菜单来为 JTextArea 添加右键弹出式菜单,实现复制、粘贴、剪切功能。 一、Java 弹出菜单概述 Java 弹出菜单是一种 context-sensitive 菜单,即在用户点击右键时出现的菜单。它...

    右键菜单

    在Java中,我们可以使用Swing或JavaFX库来创建右键菜单。在Swing中,`JPopupMenu`类用于创建弹出菜单,`JMenuItem`则用于添加菜单项。可以通过`setInvoker`方法将组件与菜单关联,然后使用`addMouseListener`监听...

    Java右键弹出菜单源码设计资料

    1. **Swing与JavaFX**: 在Java中,有两种主要的图形用户界面(GUI)库,即Swing和JavaFX,它们都支持创建右键菜单。Swing是较老但广泛使用的库,而JavaFX是现代且更强大的GUI框架。Swing中的`JPopupMenu`类是用于...

    超经典的梅花雪树+右键菜单

    在IT领域,"梅花雪树+右键菜单"可能指的是一个特定的软件组件或界面设计模式,它结合了梅花雪树的数据展示方式和右键快捷菜单的功能。这种设计通常用于提高用户界面的交互性和效率,特别是在处理复杂数据结构时。 ...

    Java右键弹出菜单源码

    总之,这个"Java右键弹出菜单源码"项目为Java Swing应用开发提供了一个基础框架,帮助开发者快速集成和定制右键菜单功能。通过学习和实践这个源码,你可以深入了解Java图形用户界面设计,并提升你的GUI编程技能。

    Java右键弹出菜单源码.rar

    首先,Java提供了javax.swing.JPopupMenu类来创建和管理上下文菜单。JPopupMenu是一个轻量级组件,可以附加到其他组件上,当用户在其上执行右键单击操作时显示。以下是一个简单的创建和使用JPopupMenu的基本步骤: ...

    Swing 弹出式菜单用法

    Swing 菜单控件可以在菜单中使用图标,菜单项可以为单选按钮或者复选框,并可以为菜单项指定加速键和快捷键。大多数的标准控件都可以用做菜单项。另外,Swing 菜单为程序提供了大家熟悉的菜单分隔线、弹出式菜单和子...

    基于Java的实例源码-右键弹出菜单源码.zip

    在这个例子中,`myComponent`是你想要添加右键菜单的组件,`mousePressed`方法检测鼠标事件,如果触发了右键菜单(通过`isPopupTrigger()`检查),则调用`show()`方法来显示`popupMenu`,参数是组件的位置坐标。...

    基于Java的右键弹出菜单源码.zip

    这个“基于Java的右键弹出菜单源码.zip”文件很可能包含了一个实现这种功能的示例代码,对于学习和理解如何在Java应用中创建自定义的右键菜单非常有帮助。 在Java中,我们可以使用Swing或JavaFX库来创建右键弹出...

    java swing 菜单按钮

    除了菜单栏,Swing还提供了`JPopupMenu`类,它可以用于创建弹出式菜单,常用于右键点击或按钮的上下文菜单。创建弹出式菜单并关联到组件: ```java JPopupMenu popup = new JPopupMenu(); JMenuItem copyItem = new...

    菜单及Swing组件

    同时,可以通过`setAccelerator()`方法为菜单项设置快捷键,提高用户体验。 其次,弹出式菜单(PopupMenu)是另一种常见的交互方式,它会在用户触发特定事件(如右键点击)时显示。在Swing中,我们可以使用`...

    java源码:Java右键弹出菜单源码.zip

    此压缩包中的源码很可能是通过以上方式实现了一个完整的右键弹出菜单功能,并可能包含了一些高级特性和定制,比如菜单项的分组、快捷键、图标或者动态加载等。通过研究这些源码,开发者可以深入理解如何在Java Swing...

    java做的简易记事本含快捷键_查找_替换等

    此外,程序还引入了快捷键操作和鼠标右键菜单,极大地提升了用户体验。 #### 二、主要功能模块 ##### 1. 文件操作 - **新建**:创建一个新的空白文档。 - **打开**:选择一个已存在的文件并打开它。 - **保存**:...

    java记事本(多窗口,功能比windows自带的都要强)

    此Java记事本具备多窗口编辑能力,并且其功能远远超过Windows自带的记事本,具体包括但不限于右键菜单、快捷键支持等。 #### 1. 项目背景与目的 开发此Java记事本的主要目的是为了提供一种更加高效、功能更全面的...

    java做的简易记事本含快捷键查找替换等收集.pdf

    该程序包含文件操作(如新建、打开、保存、另存为和退出),文本编辑(查找、替换),格式调整(如换行和字体颜色),以及右键菜单支持(撤销、复制、剪切、粘贴和全选)。此外,它还集成了快捷键功能,尽管可能未...

    基于java的开源的Swing组件 JIDE.zip

    4. **对话框和组件**:JIDE包含了一系列预设的对话框,如文件选择对话框、输入对话框等,还有弹出式组件,如右键菜单,这些都可轻松集成到应用程序中。 5. **布局管理**:JIDE提供了多种布局管理器,如...

    基于Swing和AWT实现的仿windows记事本

    5. **菜单和快捷键**:尽管描述中提到没有实现右键菜单,但记事本通常会有一个标准的菜单栏,包括“文件”、“编辑”等选项,并且会有对应的快捷键支持。在Swing中,可以使用`JMenuBar`、`JMenu`和` JMenuItem`等类...

    在系统菜单中添加菜单项

    如果是使用Java的Swing库,可以使用`JMenuBar`和`JMenu`类来构建菜单结构。 3. **资源文件**:在某些情况下,菜单项的定义可能存储在资源文件中,比如在.NET Framework中,菜单项可以通过XML格式的资源文件来定义,...

    基于Java的开源的Swing组件 JIDE.zip

    4. **菜单和工具栏**:JIDE的菜单和工具栏组件支持自定义图标、快捷键以及右键菜单,使得应用的交互更加友好。 5. **拖放功能**:JIDE实现了Java的拖放API,使用户能够轻松地在组件间移动数据。 6. **国际化支持**...

Global site tag (gtag.js) - Google Analytics