gpt4 book ai didi

java - Swing:将功能键 (F2) 设置为加速器

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:19:14 25 4
gpt4 key购买 nike

我有一个菜单项“重命名”,将 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com