0

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

我没有对其进行测试,但是这看起来很合乎逻辑,这将是问题所在。

谢谢

4

1 回答 1

1

Swing 通过使用键绑定来工作。因此,根据找到的键绑定只调用一个操作。因此,您不会将文本粘贴两次。

您可能会调用不同的 Action,具体取决于哪个组件具有焦点以及如何调用 Action。

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

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

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

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

JMenuItem pasteAction = new JMenuItem( new DefaultEditorKit.PasteAction() );
pastAction.setAccelerator(...);
于 2010-11-09T17:26:01.417 回答