我有一个菜单项“重命名”,将 F2 设置为快捷键。事实上,当菜单显示时,“重命名”旁边会有一个小的“F2”指示。
遗憾的是,这不起作用。此加速器触发无响应。当我将加速器更改为 CTRL+F2 - 它起作用了。
看来我应该使用 InpoutMpa/ActionMap。这样做的问题是我希望它在应用程序的任何地方都能工作,所以我试图将它与顶级 JFrame 相关联。但是,JFrame 没有 getInputMap() 方法。
迷路了。
[添加]
ks = KeyStroke.getKeyStroke(KeyEvent.VK_F2, 0);
JMenuItem mi = new JMenuItem("Rename");
mi.setAccelerator(ks);
mi.addActionListener(action);
最佳答案
发生这种情况的原因可能是 JTable 使用 F2 调用 StartEditing 操作(我在我的一个程序中看到了相同的行为并将其追溯到此)。
有几个解决方案。最彻底的是删除这个输入映射(我相信这段代码实际上删除了所有 JTables 的映射):
KeyStroke keyToRemove = KeyStroke.getKeyStroke(KeyEvent.VK_F2, 0);
InputMap imap = table.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
while (imap != null)
{
imap.remove(keyToRemove);
imap = imap.getParent();
}
或者,如果您仅将表格用于显示,并且不打算让用户对其进行编辑,则可以使其不可聚焦:
table.setFocusable(false);
在一个完全不同的主题上,我强烈建议为您的菜单项创建一个 AbstractAction
子类,而不是“从头开始”创建它们。除了为您提供非常简单的菜单设置代码外,您还可以对主菜单和弹出窗口/工具栏使用相同的操作实例,并同时启用/禁用它们。
关于java - Swing:将功能键 (F2) 设置为加速器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2019371/