如何在Swing中使用加号或减号的菜单加速器?

时间:2011-10-01 16:28:40

标签: java swing menuitem shortcut

我尝试使用以下内容设置JMenuItem的加速器:

item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_PLUS, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));

菜单项显示快捷方式⌘+(在Mac上),但点击这两个键不会触发它。我对减号-也有同样的问题。

有没有办法让菜单项中包含任何这些标志作为快捷方式?

编辑 - 这是一个SSCCE:

public class MenuWithPlus {
    public static void main(String[] args) {
        JFrame frame = new JFrame();

        JMenuBar bar = new JMenuBar();
        JMenu menu = new JMenu("View");
        JMenuItem item = new JMenuItem("Zoom in");
        item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_PLUS, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
        item.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println("ZOOM IN TRIGGERED");
            }
        });
        menu.add(item);
        bar.add(menu);
        frame.setJMenuBar(bar);

        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}

2 个答案:

答案 0 :(得分:2)

在加速器代码中,您必须修改为:

item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_ADD, Event.CTRL_MASK));

我做的一个测试是在帧上添加一个关键事件监听器并捕获加号的de key值(在这种情况下为ADD)。

frame.addKeyListener(new KeyAdapter() {
    @Override
    public void keyPressed(KeyEvent e) {
        System.out.println(e.getKeyCode());
    }
    });

答案 1 :(得分:1)

你在主键盘和小键盘上使用 + / - 键吗?它们被视为单独的键,因此请确保您始终如一地使用它们。

认为 VK_PLUS不用于通常的加号键(美国键盘上的 Shift - = ),但是而是在一些德国键盘上使用numpad + + 键。假设你有一个美国键盘,你可能需要 Shift VK_EQUALS

请参阅this old bugthis discussion