最近用到了JMenu,可是它不能加 3种以上的组合键,虽然有了 setAccelerator这个方法,但是 用了就会抛出异常,让人非常郁闷,把互联网上搜了个遍,没找到,国外论坛有人说这个是SUN的BUG,呵呵,没办法查看了源码,原来:
public void setAccelerator(KeyStroke keystroke)
{
throw new Error("setAccelerator() is not defined for JMenu. Use setMnemonic() instead.");
}
直接抛异常,原来 JMenu 是继承 JMenuItem的,但是SUN为什么要屏蔽这个方法呢 setMnemonic(“填入值”)这个方法只能是ALT+你填入的值,要想做到3个以上的话只能自己动手改写了。
import javax.swing.Action;
import javax.swing.DefaultButtonModel;
import javax.swing.Icon;
import javax.swing.JMenu;
import javax.swing.KeyStroke;
public class MyJMenu extends JMenu{
private KeyStroke accelerator;
private boolean isMouseDragged;
public MyJMenu(String s, Icon icon) {
isMouseDragged = false;
setModel(new DefaultButtonModel());
init(s, icon);
initFocusability();
}
void initFocusability() {
setFocusable(false);
}
public MyJMenu() {
super();
}
public MyJMenu(Action action) {
super(action);
}
public MyJMenu(String s, boolean flag) {
super(s, flag);
}
public MyJMenu(String s) {
super(s);
}
//这里以上的代码 主要是 为了在JMenu上能放个小图片 呵呵
//这里Override
@Override
public void setAccelerator(KeyStroke keystroke) {
KeyStroke keystroke1 = accelerator;
accelerator = keystroke;
repaint();
revalidate();
firePropertyChange("accelerator", keystroke1, accelerator);
}
@Override
public KeyStroke getAccelerator() {
return accelerator;
}
}
这样就ok了
分享到:
相关推荐
通过JMenuBar在面板上实现总菜单,通过JMenu创建总菜单栏的下拉菜单,在下拉菜单中加入JMenuItem,就是加入我们常用子菜单,如果需要在子菜单上嵌套菜单,就需要在下拉菜单中加入JMenu,在这个JMenu上加入JMenuItem...
【jMenu v2.0】是一款专为网页设计者打造的水平导航菜单系统,它具有无限级别的下拉子菜单功能,极大地增强了网站的导航体验。这个菜单系统是基于JavaScript和CSS构建的,允许用户轻松创建层次分明、交互性强的菜单...
通过组合`JFrame`、`JMenuBar`、`JMenu`和`JMenuItem`,我们可以创建出具有交互式菜单的复杂Java Swing应用程序。在实际项目中,我们还可以进一步定制这些组件,比如设置图标、调整字体、添加快捷键等,以满足不同...
### Java零基础-文本编辑快捷键 #### 概要 本文档主要介绍如何在Java中利用按键事件处理机制实现文本编辑器的快捷键功能。针对初学者,文章提供了详细的步骤和一个简化的源码示例,帮助读者理解如何在Java程序中...
此外,程序还引入了快捷键操作和鼠标右键菜单,极大地提升了用户体验。 #### 二、主要功能模块 ##### 1. 文件操作 - **新建**:创建一个新的空白文档。 - **打开**:选择一个已存在的文件并打开它。 - **保存**:...
6. **菜单与菜单项**: `JMenu`和`JMenuItem`用于创建菜单栏和子菜单,如“文件”、“编辑”、“格式”等。菜单项可以关联到ActionListener,当被选中时执行相应操作。 7. **撤销/重做机制**: 可能使用了`javax....
jMenu 是一款基于 jQuery 的高效组件,专门用于构建具备无限级子菜单的水平导航菜单。这款插件的设计理念是简洁和易用,使得开发者能够快速地在项目中集成高质量的导航功能。 jMenu 插件的核心特性包括: 1. **...
在Java中,可以使用`setMnemonic`方法为`JMenu`设置Alt+字符键的快捷键,如`file.setMnemonic(KeyEvent.VK_F)`。 - 对于`JMenuItem`,可以使用`setAccelerator`方法设置Ctrl或Alt+字符键的快捷键,如`open....
在Java编程领域,`JTree` 和 `JMenu` 是Swing库中的两个重要组件,它们常用于构建用户界面。本项目"jtree和QQ项目\使用jmenu实现QQ的好友界面"旨在利用这两个组件来复刻QQ软件的好友管理功能,提供一个直观且易于...
通过`KeyStroke`和`KeyEvent`,可以为菜单项设置快捷键,如`jme1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, KeyEvent.CTRL_MASK))`设置的是Ctrl+N的快捷键。 文件操作涉及到`File`类,如`FileReader`...
在实验中,可以看到一些按钮使用了 `add()` 方法直接添加,这通常采用的是默认的 `FlowLayout`,而其他按钮通过 `add(new Button(...))` 创建,可能采用了自定义布局或组合布局。 4. **属性设置**: - `...
**jMenu: 构建多级子菜单的JavaScript解决方案** jMenu是一款轻量级的JavaScript库,专门设计用于创建具有多级子菜单的上下文菜单或网站导航菜单。这款库以其简洁的API和高效的性能,使得开发者能够快速、便捷地在...
通过 `KeyStroke.getKeyStroke()` 方法结合 `setAccelerator()` 方法,可以为菜单项设置快捷键,如 `mItemFileNew.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, Event.CTRL_MASK));` 为新建菜单项设置了...
在Java中,可以使用JMenu、.JMenuItem和Key Bindings来创建和绑定这些功能。例如,Ctrl+C、Ctrl+V等快捷键对应复制和粘贴操作。 5. **格式化和样式**:虽然Java记事本可能没有实现所有Windows记事本的功能,但它...
`JMenu`的快捷键通常为`Alt`加上字符键的组合,而`JMenuItem`的快捷键可以是`Ctrl`加上字符键或`Alt`加上字符键的组合,通过调用`setMnemonic`和`setAccelerator`方法来实现。 #### 四、菜单项的事件处理 当用户...
- 包含一个名为“文件”的菜单(`JMenu`),快捷键为F。 - “文件”菜单中包含以下功能: - 新建(`JMenuItem`):快捷键为Ctrl+N,用于创建一个新的绘图文档。 - 打开:快捷键为Ctrl+L,用于打开已存在的绘图文档。 ...
JMenu 还支持快捷键设置,方便用户操作。 3. **JMenuBar**: JMenuBar 是菜单栏的类,通常位于窗口的顶部。你可以将多个 JMenu 添加到 JMenuBar 中,创建多级菜单系统。 4. **JMenuItem**: JMenuItem 是菜单中的一...
通过组合使用`JMenu`、`JMenuBar`和`JMenuItem`,你可以构建出复杂的菜单结构,以满足各种应用需求。此外,你还可以为这些菜单项添加事件监听器,以便在用户选择某个菜单项时执行相应的操作。例如,可以通过实现`...
“图片管理系统”是一个综合运用了Java语言的GUI编程、数据库操作以及文件处理等多种技术的典型示例。通过对该项目的学习和实践,不仅可以掌握Java基础语法,还能深入了解面向对象编程的思想以及实际项目的开发流程...
JMenu menuEdit = new JMenu("编辑(E)"); // 创建“编辑”菜单 JMenuItem CopyItem = new JMenuItem("复制"); // 创建“复制”菜单项 JMenuItem PasteItem = new JMenuItem("粘贴"); // 创建“粘贴”菜单项 ...