当前位置: 首页 > 知识库问答 >
问题:

Java中助记符的更改修饰符

东郭源
2023-03-14

下面的代码是创建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)

这里的问题是:由于我的redoItem不使用DefaultEditorKit,它将修饰符默认为ALT,并且只在显示popupMenu时重做文本。(ALT Y)

cutItem正是我想要的方式。如何使重做项具有相同的功能?我想要(CTRL Y)而不是(ALT Y),并且在不打开弹出菜单的情况下使用该操作。

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


共有1个答案

陆伟
2023-03-14

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

请参见:程序的键绑定,以显示所有Swing组件的默认键绑定。

您混淆了助记词加速器

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

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

如果希望通过CTRL Yhtml" target="_blank">调用重做操作,则需要使用以下方法之一向菜单项添加加速器:

>

  • 将加速器直接添加到零部件中。阅读Swing教程中有关如何使用菜单的部分以了解更多信息。

    您也可以向Action添加一个"加速器"。请阅读如何使用操作的教程。这将是首选方法,因为Action的属性应该默认为组件。因此,您可以使用Action创建一个JMenuItemJButton,并且Action的相关属性将应用于组件。

  •  类似资料:
    • 在Swing中设置焦点热键非常简单: 当用户按下时,这将使jtext字段成为焦点。它还高亮显示将触发焦点更改的角色。(在这种情况下,当按下时,“Plants”中的“P”带下划线。) 这太棒了。。。嗯,有点。在Mac电脑上,当用户按下(也是Mac键盘上的)时,助记符处于高位,但按下时不会触发焦点变化。但是,如果用户按下了控制选项p,则它会按“预期”工作,焦点也会改变。(另一方面,如果用户确实按了,当

    • 问题内容: 有没有理由可以更改覆盖方法的访问修饰符?例如, 然后将package-private访问修饰符更改为, 我只是出于好奇而问这个问题。 问题答案: Java不允许您对access修饰符进行 更严格的限制 ,因为这会违反以下规则:子类实例应该可以代替超类实例使用。但是当涉及到 减少 访问限制时……好吧,也许超类是由另一个人编写的,他们没有想到您要使用其类的方式。 人们编写的程序以及编程时所

    • 本文向大家介绍Java接口中的修饰符,包括了Java接口中的修饰符的使用技巧和注意事项,需要的朋友参考一下 示例 《 Oracle Java样式指南》指出: 当修饰符是隐式的时,不应将它们写出来。 (有关上下文和指向实际Oracle文档的链接,请参见Oracle Official Code Standard中的修饰符。) 此样式指南特别适用于界面。让我们考虑以下代码片段: 变数 所有接口变量都是具

    • 我正在编写代码以匹配给定字符串或行的方法声明。这就是我的问题所在。当试图匹配修饰符时,当声明 工作。我一直都是这样 这就是我的问题。两者有什么区别,所有修饰符都一样吗?我相信这是有原因的,松散的顺序不是设计决定。 哦,如果有人知道匹配给定字符串的方法的最佳方法,请告诉我。谢谢。现在我正在使用正则表达式。

    • 主要内容:final 修饰变量,final修饰方法,final修饰类,final 修饰符使用总结final 在 Java 中的意思是最终,也可以称为完结器,表示对象是最终形态的,不可改变的意思。final 应用于类、方法和变量时意义是不同的,但本质是一样的,都表示不可改变,类似 C# 里的 sealed 关键字。 使用 final 关键字声明类、变量和方法需要注意以下几点: final 用在变量的前面表示变量的值不可以改变,此时该变量可以被称为常量。 final 用在方法的前面表示方法不可以

    • private private修饰符是我们使用的最限制的修饰符。它表示它只能被自己所在的文件可见。所以如果我们给一个类声明为private,我们就不能在定义这个类之外的文件中使用它。 另一方面,如果我们在一个类里面使用了private修饰符,那访问权限就被限制在这个类里面了。甚至是继承这个类的子类也不能使用它。 所以一等公民,类、对象、接口……(也就是包成员)如果被定义为private,那么它们只