摆动加速器:inputMap或菜单?

时间:2011-06-23 10:14:50

标签: java swing

我想在组件中添加一个加速器,比如撤消/重做(Ctrl-Z,Ctrl-Y)到JTextComponent,但是想在{{1}中显示动作及其快捷命令我应该将JMenu + KeyStroke添加到:

  • 组件的AbstractAction
  • 到包含该组件的框架的InputMap
  • 到两个?

在这种情况下推荐的模式是什么?

3 个答案:

答案 0 :(得分:2)

如果你想按照你的描述所暗示的那样做,那么两者都做。这很正常。

但是,如果撤消/重做仅适用于帧中的几个组件,我建议不要将其添加到帧的菜单中。 (虽然您可以在组件上创建JPopupMenu

答案 1 :(得分:2)

  

但是什么时候使用带加速器的InputMap是合适的呢?

菜单的工作方式是自动为您添加绑定到InputMap / ActionMap。因此,如果您希望在菜单中记录它,那么您只需将其添加到菜单中,而不是手动映射到组件。

仅将KeyBinding添加到组件的一种情况是,您需要为每个组件添加不同的操作。例如,您可以在文本组件上创建“复制”,“粘贴”的菜单项。但像JTable这样的其他组件也支持复制和粘贴。在这种情况下,您不能有两个具有相同加速器的菜单项,因此您可以将表Action直接绑定到表。

答案 2 :(得分:0)

纯粹从用户的角度来看:我更喜欢在菜单(或上下文菜单)中看到快捷方式,因为这有助于我学习它们。