我尝试使用以下内容设置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);
}
}
答案 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
。