- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
此问题是 this question 的后续问题.
我有一个 JMenuBar
,它的行为类似于 Firefox 和 iTunes 中的菜单栏。也就是说,菜单栏最初是隐藏的,但是当您按下 Alt
时,菜单栏就会出现。
另一个问题的答案解决了实现该功能的问题,但它带来了另一个问题:JMenuItem
加速器在 JMenuBar 时不工作
不可见。换句话说,您必须先按 Alt
,然后 CTRL+F
(已安装的加速器)才会起作用。
不过,这不应该是这种情况,因为 setAccelerator()
方法声明如下:
public void setAccelerator(KeyStroke keyStroke)
Sets the key combination which invokes the menu item's action listeners without navigating the menu hierarchy. It is the UI's responsibility to install the correct action. Note that when the keyboard accelerator is typed, it will work whether or not the menu is currently displayed.
所以,我想知道这是否是另一个 Java 错误?
SSCCE (要显示菜单,请按 Alt
,安装的加速器是 CTRL+F
用于“查找”,它会弹出一个虚拟的 JOptionPane
用于输入):
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.KeyStroke;
import javax.swing.MenuElement;
import javax.swing.MenuSelectionManager;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.WindowConstants;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class MenuBarTest extends JFrame {
public MenuBarTest() {
JMenu jMenu1 = new JMenu();
JMenu jMenu2 = new JMenu();
final JMenuBar jMenuBar1 = new JMenuBar();
JMenuItem jMenuItem1 = new JMenuItem();
JMenuItem jMenuItem2 = new JMenuItem();
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
jMenu1.setText("File");
jMenuItem1.setText("jMenuItem1");
jMenu1.add(jMenuItem1);
jMenuBar1.add(jMenu1);
jMenu2.setText("Edit");
jMenuItem2.setText("Find");
jMenu2.add(jMenuItem2);
jMenuBar1.add(jMenu2);
setJMenuBar(jMenuBar1);
jMenuBar1.setVisible(false);
ChangeListener listener = new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
MenuElement[] elements = MenuSelectionManager.defaultManager().getSelectedPath();
jMenuBar1.setVisible(elements.length > 0 && elements[0] == jMenuBar1);
}
};
MenuSelectionManager.defaultManager().addChangeListener(listener);
jMenuItem2.setAccelerator(KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F, java.awt.event.InputEvent.CTRL_MASK));
jMenuItem2.setText("Find");
jMenuItem2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
String what = JOptionPane.showInputDialog(MenuBarTest.this, "Search for what?");
System.out.println(what);
}
});
pack();
setSize(500,500);
setLocationRelativeTo(null);
setVisible(true);
}
public static void main(String args[]) {
try {
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new MenuBarTest();
}
});
}
}
最佳答案
仔细阅读你的重点
Note that when the keyboard accelerator is typed, it will work whether or not the menu is currently displayed.
这里讨论的是菜单,而不是它的父级。这意味着当前可能未显示菜单。然而,真正的(可能没有充分记录的)抑制特性是它必须显示。已更新我对您之前问题的回答。
关于java - 隐藏菜单栏时 JMenuItem 加速器不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18155493/
大模型技术的发展和应用,预示着更加智能化、个性化未来的到来。如果将大模型比喻为正在疾驰的科技列车,语料便是珍贵的“燃料”。本次世界人工智能大会期间,合合信息为大模型打造的“加速器”解决方案备受关
如何设置快捷方式,例如。 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
我是一名优秀的程序员,十分优秀!