如何向JMenuItem添加单个快捷方式

时间:2012-08-19 20:20:59

标签: java swing keyboard-shortcuts

我正在创建一个类似记事本的简单文本编辑器。 如果用户按 F5 ,它会将时间和日期插入到文件中。 我浏览了助记符和加速器,但它们分别与 Alt Ctrl 结合使用。

我应该使用EventListener还是有其他解决方案?

3 个答案:

答案 0 :(得分:9)

你可以简单地使用:

JMenuItem menuItem = new JMenuItem("Refresh");
KeyStroke f5 = KeyStroke.getKeyStroke(KeyEvent.VK_F5, 0);
menuItem.setAccelerator(f5);

KeyStroke 0未指定docs中所述的修饰符。

ActionListener是菜单项事件的适当侦听器。

答案 1 :(得分:5)

正如部分评论中已经提到的那样,推荐的方法是

  • 使用操作配置menuItem
  • 使用加速器配置操作
  • 将操作添加到菜单

一些代码:

Action doLog = new AbstractAction("Dummny log!") {

    @Override
    public void actionPerformed(ActionEvent e) {
        LOG.info("doing: " + getValue(Action.NAME));
    }
};
doLog.putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke("F5"));

JMenu menu = new JMenu("dummy");
menu.add(doLog);
frame.getJMenuBar().add(menu);

答案 2 :(得分:4)

您可以像这样向KeyBinding添加JMenuItem

Action sayHello = new AbstractAction() {
    public void actionPerformed(ActionEvent e) {
        JOptionPane.showMessageDialog(null,"Hello World, From JMenuItem :)");
    }
};
jMenuItem.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("F5"),"sayHello");//4.The WHEN_IN_FOCUSED_WINDOW input maps of all the enabled components in the focused window are searched.
jMenuItem.getActionMap().put("sayHello",sayHello);

<强>参考文献: