Java 将加速器描述添加到GUI中的JMenuItem,而不实际添加加速器

Java 将加速器描述添加到GUI中的JMenuItem,而不实际添加加速器,java,swing,jmenuitem,Java,Swing,Jmenuitem,我试图为JMenuItem设置一些文本,以便在通常显示加速器绑定的位置显示。 下图中标定的Ctrl+Z文本是我试图为另一个JMenuItem设置的示例 不过,我实际上不想为这个JMenuItem设置加速器。 我在源代码中搜索了几个类,比如JMenuItem和BasicMenuItemUI,但都没有找到。 最简单的方法是什么 提前感谢:)我想您之所以希望这样做,是因为当组合键已绑定到框架上的组件上时,您可以防止菜单再次触发撤消操作,但这不是必需的。如果组件使用键事件,菜单将不会检测到它 下面是一

我试图为
JMenuItem
设置一些文本,以便在通常显示加速器绑定的位置显示。 下图中标定的Ctrl+Z文本是我试图为另一个
JMenuItem
设置的示例

不过,我实际上不想为这个
JMenuItem
设置加速器。 我在源代码中搜索了几个类,比如
JMenuItem
BasicMenuItemUI
,但都没有找到。 最简单的方法是什么


提前感谢:)

我想您之所以希望这样做,是因为当组合键已绑定到框架上的组件上时,您可以防止菜单再次触发撤消操作,但这不是必需的。如果组件使用键事件,菜单将不会检测到它

下面是一个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键只打印“文本”,而不打印“菜单”。即,该动作不会发生两次。尽管这使用了JTextArea,但它应该适用于任何组件。

实际上没有。从内存中,
JMenuItem
是显示内容的代理,
JMenu
实际上生成视图本身