【问题标题】:Change modifier of mnemonic in JavaJava中助记符的更改修饰符
【发布时间】: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


【解决方案1】:

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

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

您将mnemonicaccelerator 混淆了。

mnemonic 是您在菜单项可见时调用Action 的方式。它将是菜单项文本中带下划线的字符。这就是为什么您只为助记符指定字符的原因。用于调用助记符的键取决于操作系统。对于 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 的相关属性应用于组件。

【讨论】:

  • 我已阅读教程,但从未掌握加速器的概念。谢谢
  • 助记符是在菜单项可见时调用 Action 的方式。它将是菜单项文本中带下划线的字符。加速器允许您在菜单关闭时调用操作,因此它可以避免用户首先显示菜单。它将是显示在菜单项文本右侧的击键。
  • @mry_02,我更新了我的答案,因为它有点误导。
猜你喜欢
  • 1970-01-01
  • 2012-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-09
  • 2013-05-25
相关资源
最近更新 更多