【问题标题】:Java - Add accelerator to a JMenuItemJava - 将加速器添加到 JMenuItem
【发布时间】:2012-04-15 18:19:31
【问题描述】:

我想为 JMenuItem 设置加速键。

现在我是这样设置的

openFile.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, ActionEvent.CTRL_MASK));

它正在工作,但我不希望 ctrl+o 作为加速器。我想要“空格”作为加速器,但我没有找到任何方法可以生成与“空格”对应的 KeyStroke。

KeyStroke.getStroke()

要么采用 char 要么采用 (int, int)。我也没有找到任何与空格对应的字符。

【问题讨论】:

    标签: java swing accelerator jmenuitem


    【解决方案1】:

    ..也没有找到任何与空格对应的字符。

    KeyEvent.VK_SPACE

    如果 Swing 忽略它,我不会感到惊讶,因为 ' ' 是一个不寻常且难以看到的加速器。

    【讨论】:

    • 我说没找到char对应空格。 KeyEvent.VK_SPACE 是一个 int 并且没有像 KeyStroke.getStroke(int) 这样只接受 int 的方法。我还必须提供一些我不想要的修饰符。
    • 那么让我直说吧。如果用户选择一个按钮并按下“速度”来激活它,你想调用菜单操作吗?让我将“不寻常且难以看到的加速器”升级为“无法使用的 GUI”。我的建议是“选择一个可行的加速器字母”。菜单项中显示的文本是什么?
    • +1 为用户着想。 :-) 更多 here.
    • hmm ... 没有尝试只是假设:显示名称是 Space 不为空:-)
    【解决方案2】:

    大多数 UI 代理使用类似 METRICAL TETRASEME: ⏘ (U+23D8) 的方式呈现 KeyEvent.VK_SPACE 加速器。例如,Action 可能包含以下行:

    static final int MASK = Toolkit.getDefaultToolkit().getMenuShortcutKeyMask();
    putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, MASK));
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多