Java中助记符的更改修饰符

Java中助记符的更改修饰符,java,swing,action,key-bindings,Java,Swing,Action,Key Bindings,下面的代码是创建jpopmpmenu(未显示)的方法的一部分,该方法有几个选项,如撤消、重做、剪切、复制、粘贴等 JMenuItem redoItem = new JMenuItem(new PrintAction()); redoItem.setText("Redo"); redoItem.setMnemonic(KeyEvent.VK_Y); popupMenu.add(redoItem); JMenuItem cutItem = new JMenuItem(n

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

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
类仅用于调试目的,但这是我通常放置
RedoAction
类的地方

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
中的内置方法
CutAction
,它会自动将我的修改器设置为control,并在我需要的时候精确剪切文本。(CTRL+X)

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

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


我读过类似标题的论坛,但没有正确的答案。

文本组件有一个用于基本剪切、复制、粘贴操作的默认键绑定,这就是为什么CTRL+X可以工作的原因

有关显示所有Swing组件的默认键绑定的程序,请参阅

您将
助记符
加速器
混淆

助记符是当菜单项可见时调用
操作的方式。它将是菜单项文本中带下划线的字符。这就是为什么您只为助记符指定字符。用于调用助记符的键依赖于操作系统。对于Windows,使用Alt键

加速器
允许您在菜单关闭时调用
操作
,因此它可以避免用户首先显示菜单。它将是菜单项文本右侧显示的
击键
。您可以指定任何击键组合,但通常在Windows中使用Ctrl+“其他键”

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

  • 将加速器直接添加到零部件。有关更多信息,请阅读上的Swing教程部分

  • 您还可以在
    操作中添加“加速器”。阅读上的教程。这是首选方法,因为
    操作的属性应默认为组件。因此,您可以使用
    Action
    创建
    JMenuItem
    JButton
    ,并且
    Action
    的相关属性将应用于组件


  • 您可能还应该使用ctrl+Y和重做操作的副本将键绑定附加到组件上,这就是为什么操作令人惊叹的原因您可能应该首先看看我读过的教程,但从未掌握加速器的概念。谢谢助记符是当菜单项可见时调用操作的方式。它将是菜单项文本中带下划线的字符。加速器允许您在菜单关闭时调用操作,因此它可以避免用户首先显示菜单。它将是显示在菜单项文本右侧的关键笔划。@mry_02,我更新了我的答案,因为它有点误导。非常感谢,非常有意义