- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以我必须在 Swing 中为我的 Java 类创建一个简单的 GUI,我偶然发现了这个小的装饰性问题。
我有以下代码:
JMenuItem mntmQuit = new JMenuItem("Quit");
mntmQuit.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (e.getModifiers() == MouseEvent.BUTTON1_MASK) {
System.out.println("You should fire.");
} else if (e.getModifiers() == MouseEvent.BUTTON2_MASK || e.getModifiers() == MouseEvent.BUTTON3_MASK) {
System.out.println("Why do you fire this event?");
} else {
System.out.println("And how can I catch when the accelerator was used?");
}
}
});
mntmQuit.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q, 0));
我从未见过在右键单击或使用除按钮 1 以外的任何其他鼠标按钮时调用的菜单项。因为看起来 Swing 对此有不同的看法,并且无论按下哪个鼠标按钮都会发送一个 Action 事件 - 与一个 JButton
,除非用鼠标按钮 1 单击它,否则不会触发任何东西。
现在我可以接受它了,因为我可以轻松地捕捉到鼠标按钮 1 并执行我的操作,但是捕捉加速器的使用情况如何呢?它会触发 Action 事件,但我看不到任何捕获它的可能性,因为它返回“0”作为修饰符(与除 1、2 和 3 之外的任何其他鼠标按钮相同)。
有什么方法可以告诉 JMenuItem
它应该只对鼠标按钮 1 和它的加速器使用react?类似于JButton
的做法?
最佳答案
JMenuItem mntmQuit = new JMenuItem("Quit");
mntmQuit.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (!(e.getModifiers() == InputEvent.BUTTON3_MASK)) {
System.out.println(e.getActionCommand());
}
}
});
mntmQuit.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q, 0));
编辑:
我已经更改了我的答案,而不是检查事件何时触发,您应该检查何时不触发它。所以在这种情况下,Button3
或右键单击。当您按下“q”或任何鼠标点击时,该事件将始终触发。
之前的答案很糟糕,您不想使用 e.getModifiers()
因为它可能会为您不想返回 true 的事件返回 true。例如如果您将“q”和“w”设置为同一个按钮,但它们执行不同的操作,则两个事件都会在第一个 if
语句检查 e.getModifiers() == 0 时触发
抱歉造成混淆,希望这更有意义。
关于java - JMenuItem - 如何确定加速器是否调用了操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16176523/
大模型技术的发展和应用,预示着更加智能化、个性化未来的到来。如果将大模型比喻为正在疾驰的科技列车,语料便是珍贵的“燃料”。本次世界人工智能大会期间,合合信息为大模型打造的“加速器”解决方案备受关
如何设置快捷方式,例如。 Ctrl+Q,到 JButton ? JMenuItem有 setAccelerator()设置一个的方法,但是 JButton没有。 最佳答案 好吧,您可以使用 set o
如何从 TMainMenuActionBar 中删除加速器? 似乎找不到要更改的 AutoHotKey = maManual 属性,也找不到任何其他会产生正确效果的属性。 最佳答案 (假设问题是关于
我正在 Appcelerator 中开发 iOS 应用程序。如何检测用户何时点击窗口标题(导航栏中的标题)? 感谢您的所有意见! 最佳答案 我会在导航栏标题上放置一个透明 View ...如果您不使用
我读到了助记符和加速器的区别,但现在我想知道这些是否加速器仅用于菜单项或其他 JComponents。 最佳答案 您可以为任何 JComponent 使用键绑定(bind) :) 看看这个 guide
我在 Windows 10 中使用 Delphi XE7。我在主窗体和模态辅助窗体上都有一个 TMainMenuBar。问题是,如果辅助窗体还包含 TMemo,辅助窗体上的加速键不会激活菜单。例如,如
(是的,我知道 SO 上有 a similar question,但它已经 8 个月大了——从那时起 IE8 RTM 就出来了——而且不是很有启发性) 是否可以在我的网站上禁用 IE8 的“加速器”?
我需要创建一个可在 BlackBerry (10%) 和 iO (90%) 上运行的应用程序。 Appcelerator Titanium 看起来确实可以,但 BlackBerry 开发仅在 Wind
我正在使用 PowerBuilder(我猜它与这个问题无关,尽管我可能错了)。 我正在尝试将按钮上的文本设置为“Save && &New”,它应该读作“Save & New”,并带有下划线“N”。 可
$ appc ti build -T dist-adhoc Appcelerator Command-Line Interface, version 7.1.2 Copyright (c) 2014-
好吧,我对 Electron 和开发网络应用程序非常陌生。我不擅长阅读文档。如何注册全局短 切割为 Electron 。 最佳答案 即使应用程序没有键盘焦点,您也可以使用 globalshortcut
我目前正在使用 Appcelerator 开发一款 Android 应用程序,该应用程序仅提供西类牙语版本。 我的问题是,如果用户的智能手机不是西类牙语,则 strings.xml 中的字符串将不会显
Titanium SDK 版本:1.7.0iPhone SDK 版本:4.2 我正在开发一个 iOS 应用程序,我监控每个窗口的内存使用情况,并且它在每个屏幕上都在不断减少。 一般来说什么是消耗内存?
我正在使用glade和C语言来开发GUI。我能够将键盘上的所有数字键和字母键映射到林间按钮作为加速器。但是,我无法映射以下按钮:ESC、向上、向下、向左、向右箭头。 在林间空地,当我在加速器字段中输入
我的应用程序的主 JFrame 包含一个 JTextPane。虽然它具有焦点,但它会使用所有键盘快捷键(“加速器”),而不是将它们传递给 JFrame 的 JMenu。这意味着虽然它有焦点,例如“新建
我想给组件添加一个加速器,比如对 JTextComponent 执行撤消/重做(Ctrl-Z、Ctrl-Y),但想在JMenu,我应该将 KeyStroke + AbstractAction 添加到:
我知道从 4.2.1 开始就有适用于 iOS 的 API安卓呢?谁知道我们什么时候可以在 Android 浏览器中访问陀螺仪数据? 最佳答案 据我所知,最常见的版本(Android 2.2、2.3)不
我目前正在使用 WCF 服务,该服务使用基于消息的安全性,旨在通过 HTTP 而不是 HTTPS 进行访问。 这已经过测试,效果很好。在部署到使用 SSL 加速器的机器时,出现以下错误。 “接收对 h
我有一个 mfc 应用程序,我在其中定义了键盘加速器当我使用字母数字字符时它工作正常,但我想定义一个加速器,在按下 +/- 键时放大/缩小所以我将其定义如下并且它工作正常 ID1 ACCELERAT
最近我做了一些研究,使用加速度计 + 陀螺仪来使用这些传感器在没有 GPS 帮助的情况下跟踪智能手机(见这篇文章) Indoor Positioning System based on Gyrosco
我是一名优秀的程序员,十分优秀!