1

我使用 MenuItem.setAccelerator() 在主菜单中添加了一些加速器。只是基本的东西,比如用于复制的 ctrl-c 等。

这工作正常。但该应用程序有点像 IDE,它有几个包含 JTable 的面板。如果表格单元格有焦点,它会吸收加速键,这意味着主菜单永远不会看到它。

显然,如果可编辑的表格单元格处于活动状态,我希望剪切和粘贴键能够正常工作,但在其他情况下,我希望主菜单做出响应。

有任何想法吗?

4

2 回答 2

2

KeyStrokes 转到首先获得焦点的组件。由于 JTable 将 Ctrl+C 绑定到一个动作,所以该动作被调用。

如果您不喜欢表格的默认操作,那么您需要从表格中删除绑定。

阅读 Swing 教程中有关如何使用键绑定的部分。它向您展示了如何删除绑定。

于 2011-02-15T23:06:39.320 回答
1

谢谢,这让我走上了正轨。

删除绑定并不太奏效,它只是停止了表格执行其默认操作,因此按键被完全忽略。

但是,将其添加到表本身就可以了:

    component.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_C, ActionEvent.CTRL_MASK), "copy");
    component.getActionMap().put("copy", actions.copyAction);

(当然对每个所需的键重复)。需要与主菜单本身的任何更改保持同步,但我看不到任何方法可以避免这种情况。

于 2011-02-16T14:48:41.643 回答