change修饰符

uelo1irk  于 2021-07-09  发布在  Java
关注(0)|答案(1)|浏览(390)

下面的代码是创建 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 类仅用于调试目的,但我通常会将 RedoAction

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

如您所见,我将“redo”操作的助记符设置为y,“cut”操作的助记符设置为x。
我用的是内置的方法 CutActionDefaultEditorKit ,它会自动将我的修饰符设置为“控制”,并在需要时精确剪切文本(ctrl+x组合键)
问题是:自从我 redoItem 不使用defaulteditorkit,它将修改器默认为alt,并且仅在弹出菜单显示时重做文本(alt+y键) cutItem 完全符合我的要求。我该怎么做 redoItem 有相同的特征?我想要(ctrl+y)而不是(alt+y),并且在没有 popupMenu 打开。
我在这里读过类似标题的论坛,但没有一个恰当的答案。

zd287kbt

zd287kbt1#

文本组件具有基本剪切、复制和粘贴操作的默认键绑定,这就是为什么ctrl+x可以工作的原因。
请参阅:程序的键绑定以显示所有swing组件的默认键绑定。
你弄糊涂了 mnemonic 带着一个 accelerator .
这个 mnemonic 是如何调用 Action 当菜单项可见时。它将是菜单项文本中带下划线的字符。这就是为什么您只为助记符指定字符。用于调用助记符的键依赖于操作系统。对于windows,使用alt键。
这个 accelerator 允许您调用 Action 当菜单关闭时,这样可以避免用户首先显示菜单。它将是 KeyStroke 显示在菜单项文本的右侧。您可以指定任何按键组合,但通常在windows中使用ctrl+“其他键”。
如果希望用ctrl+y调用重做操作,则需要使用以下方法之一向菜单项添加快捷键:
将加速器直接添加到零部件。阅读swing教程中有关如何使用菜单的部分以获取更多信息。
您还可以将“加速器”添加到 Action . 阅读有关如何使用动作的教程。这将是首选的方法,因为 Action 应默认为组件。所以你可以用 Action 创建 JMenuItem 或者 JButton 以及相关的性质 Action 将应用于组件。

相关问题