Java:如何使用加速器创建粘贴菜单项?

标签 java swing menu accelerator

当我创建一个包含粘贴操作的 JMenuBar 并为其分配加速器 (Control - V) 时,我为 JMenuItem 编写粘贴操作。而且我使用加速器,我的代码将被执行,并且 Swing 预编程的粘贴操作将被执行,因此我认为文本将被粘贴两次。

我没有测试它,但是,这看起来很合乎逻辑,这就是问题所在。

谢谢

最佳答案

Swing 通过使用键绑定(bind)来工作。因此,根据找到的键绑定(bind),仅调用一个操作。所以你不会将文本粘贴两次。

您可能会调用不同的操作,具体取决于哪个组件具有焦点以及操作的调用方式。

例如,如果焦点位于文本组件上,那么我猜测将使用默认的粘贴操作。

如果您单击菜单项,则会调用您添加到菜单项的操作。

如果您在焦点不在文本字段上时调用 Control+V,那么我猜会调用绑定(bind)到菜单项的操作,因为加速器使用“焦点窗口”(或任何名称)InputMap。

如果您使用 EditorKit 提供的默认操作,则不会有问题:

JMenuItem pasteAction = new JMenuItem( new DefaultEditorKit.PasteAction() );
pastAction.setAccelerator(...);

关于Java:如何使用加速器创建粘贴菜单项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4136458/

相关文章:

php - wordpress 菜单中缺少菜单项 ID

适用于 API < 11 的 Android invalidateOptionsMenu()

java - 删除后尝试重新平衡 AVL 树时出现 NullPointerException

java - 如何使jTable内容可点击但不可编辑 - java netbeans

java - 传递 JTextPane 的属性是什么?

java - 模拟的GUI渲染

java - 使用 HtmlUnit 登录

java - 在 Java 8 中使用流式链接对集合进行排序

java - 我的计时器的逻辑错误在哪里,该计时器将镜头动画移动到帧的顶部?

android - 如何在 BottomNavigationView 中隐藏和显示菜单?