我正在尝试设置一些文本,以便显示JMenuItem
通常显示加速器绑定的位置。
下图中的划分 Ctrl + Z 文本是我正在尝试为另一个JMenuItem
设置的示例。
我不实际上想要为此JMenuItem
设置加速器。
我在几个类的源代码中搜索过,如JMenuItem
和BasicMenuItemUI
,但无济于事。
实现这一目标的最简单方法是什么?
提前致谢:)
答案 0 :(得分:1)
我假设您希望这样做的原因是,当键组合已经绑定在帧上的组件上时,您可以阻止菜单第二次触发撤消操作,但这不是必需的。如果组件消耗了键事件,菜单将无法检测到它。
这是一个JTextArea的例子,看看我的意思:
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
JMenuBar menu = new JMenuBar();
frame.setJMenuBar(menu);
JMenu menuEdit = new JMenu("Edit");
menu.add(menuEdit);
JMenuItem menuEditUndo = new JMenuItem("Undo");
menuEdit.add(menuEditUndo);
menuEditUndo.setAccelerator(KeyStroke.getKeyStroke("control Z"));
menuEditUndo.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("menu");
}
});
JTextArea textArea = new JTextArea(20, 40);
textArea.getInputMap().put(KeyStroke.getKeyStroke("control Z"), "undo");
textArea.getActionMap().put("undo", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("text");
}
});
frame.add(new JScrollPane(textArea));
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
文本区域和菜单项都绑定到相同的键组合,但按 Ctrl + Z ,而文本区域具有焦点仅打印" text"从来没有" menu"。即,动作不会发生两次。虽然这使用了JTextArea,但任何组件都应该如此。