下面的代码是创建 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。
我用的是内置的方法 CutAction
从 DefaultEditorKit
,它会自动将我的修饰符设置为“控制”,并在需要时精确剪切文本(ctrl+x组合键)
问题是:自从我 redoItem
不使用defaulteditorkit,它将修改器默认为alt,并且仅在弹出菜单显示时重做文本(alt+y键) cutItem
完全符合我的要求。我该怎么做 redoItem
有相同的特征?我想要(ctrl+y)而不是(alt+y),并且在没有 popupMenu
打开。
我在这里读过类似标题的论坛,但没有一个恰当的答案。
1条答案
按热度按时间zd287kbt1#
文本组件具有基本剪切、复制和粘贴操作的默认键绑定,这就是为什么ctrl+x可以工作的原因。
请参阅:程序的键绑定以显示所有swing组件的默认键绑定。
你弄糊涂了
mnemonic
带着一个accelerator
.这个
mnemonic
是如何调用Action
当菜单项可见时。它将是菜单项文本中带下划线的字符。这就是为什么您只为助记符指定字符。用于调用助记符的键依赖于操作系统。对于windows,使用alt键。这个
accelerator
允许您调用Action
当菜单关闭时,这样可以避免用户首先显示菜单。它将是KeyStroke
显示在菜单项文本的右侧。您可以指定任何按键组合,但通常在windows中使用ctrl+“其他键”。如果希望用ctrl+y调用重做操作,则需要使用以下方法之一向菜单项添加快捷键:
将加速器直接添加到零部件。阅读swing教程中有关如何使用菜单的部分以获取更多信息。
您还可以将“加速器”添加到
Action
. 阅读有关如何使用动作的教程。这将是首选的方法,因为Action
应默认为组件。所以你可以用Action
创建JMenuItem
或者JButton
以及相关的性质Action
将应用于组件。