4

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

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

4

3 回答 3

11

你可以简单地使用:

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

KeyStroke 没有0指定任何修饰符,如文档中所述。

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

于 2012-08-19T20:32:07.977 回答
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);
于 2012-08-20T11:13:26.670 回答
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);

参考:

于 2012-08-19T20:25:22.697 回答