更改 Java 中的助记符修饰符

Change modifier of mnemonic in Java

下面的代码是创建 JPopupMenu(未显示)的方法的一部分,它有一些选项,如撤消、重做、剪切、复制、粘贴等...

JMenuItem redoItem = new JMenuItem(new PrintAction());
redoItem.setText("Redo");
redoItem.setMnemonic(KeyEvent.VK_Y);
popupMenu.add(redoItem);
    
JMenuItem cutItem = new JMenuItem(new DefaultEditorKit.CutAction());
cutItem.setText("Cut");
cutItem.setMnemonic(KeyEvent.VK_X);
popupMenu.add(cutItem);

PrintAction class 仅用于调试目的,但这是我通常放置 RedoAction class

的地方
public class PrintAction extends AbstractAction {
    @Override
    public void actionPerformed(ActionEvent arg0) {
        // TODO Auto-generated method stub
        System.out.println("Yay it worked!");
    }
}

如您所见,我将“重做”动作的助记符设置为Y,“剪切”动作的助记符设置为X。

我正在使用 DefaultEditorKit 中的 built-in 方法 CutAction,它会自动将我的修饰符设置为控制,并在我需要时准确地剪切文本。 (CTRL + X)

问题在于:由于我的 redoItem 不使用 DefaultEditorKit,它默认修饰符为 ALT,并且仅在显示弹出菜单时重做文本。 (ALT + Y)

cutItem 完全按照我想要的方式工作。我应该如何使 redoItem 具有相同的功能?我想要 (CTRL + Y) 而不是 (ALT + Y) 并在不打开 popupMenu 的情况下使用该操作。

我看过标题相似的论坛 here,但没有正确的答案。

文本组件具有用于基本剪切、复制、粘贴操作的默认键绑定,这就是 CTRL + X 起作用的原因。

请参阅:Key Bindings 显示所有 Swing 组件的默认键绑定的程序。

您将 mnemonicaccelerator 混淆了。

mnemonic 是您在菜单项可见时调用 Action 的方式。它将是菜单项文本中带下划线的字符。这就是为什么您只指定助记符的字符。用于调用助记符的密钥是 OS 相关的。在 Windows 的情况下,您使用 Alt 键。

accelerator 允许您在菜单关闭时调用 Action,从而避免用户第一次显示菜单。它将是显示在菜单项文本右侧的 KeyStroke。您可以指定任何 KeyStroke 组合,但通常在 Windows 中您会使用 Ctrl +“其他键”。

如果您希望使用 CTRL + Y 调用重做操作,则需要使用以下方法之一向菜单项添加快捷键:

  1. 将加速器直接添加到组件中。阅读有关 How to Use Menus 的 Swing 教程部分以获取更多信息。

  2. 您还可以为Action添加一个“加速器”。阅读 How to Use Actions 上的教程。这是首选方法,因为 Action 的属性应该默认为组件。因此,您可以使用 Action 创建 JMenuItemJButton,并且 Action 的相关属性将应用于组件。