【发布时间】:2021-04-22 00:47:38
【问题描述】:
下面的代码是创建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!");
}
}
如您所见,我已将“重做”动作的助记符设置为 Y,将“剪切”动作的助记符设置为 X。
我正在使用来自DefaultEditorKit 的内置方法CutAction,它会自动将我的修饰符设置为控制,并在我想要的时候准确地剪切文本。 (CTRL + X)
这是问题所在:由于我的redoItem 不使用 DefaultEditorKit,它默认修饰符为 ALT,并且仅在显示 popupMenu 时重做文本。 (ALT + Y)
cutItem 完全按照我想要的方式工作。我应该如何使redoItem 具有相同的功能?我想要 (CTRL + Y) 而不是 (ALT + Y) 并在不打开 popupMenu 的情况下使用该操作。
我看过同名论坛here,但没有正确答案。
【问题讨论】:
-
您可能还应该将键绑定附加到组件,使用 ctrl+Y 和重做操作的副本,这就是操作很棒的原因
标签: java swing action key-bindings