如何让JTable忽略回车键?

时间:2016-03-18 16:59:39

标签: java jtable key defaultbutton

我在JFrame中设置了一个默认按钮动作,但是当我专注于JTable时它没有被执行。

如何让JTable忽略回车键,以便表单可以执行默认按钮?

编辑:更多信息:我的JFrame内部是动态的,根据某些状态它可以有不同的组件:有时它会有一个插入和更新按钮,有时它可以有一个选择按钮。 根据状态,可以选择不同的按钮作为默认按钮。 JTable是一个在各种框架中使用的通用组件 - 它甚至不知道tere是否是按钮,它只是选择了其中一条线。 所有部分放在一起(jtable,按钮等),默认按钮定义,我希望在按下Enter时触发,而不是JTable的列更改为其他列。

2 个答案:

答案 0 :(得分:0)

table.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT)
                                   .put(KeyStroke.getKeyStroke("ENTER"), "none");

让我们将这行代码分成两个步骤。

第1步:

table.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);

每个JComponent都有一些InputMapsInputMap基本上是一种将KeyStrokes映射到操作的方法。

getInputMap()方法接受参数condition,该参数可以是三个值中的一个,WHEN_IN_FOCUSED_WINDOWWHEN_FOCUSEDWHEN_ANCESTOR_OF_FOCUSED_COMPONENT。这些是在JComponent类中声明的常量,对应于组件可以处于的不同状态。JComponent对于每个状态都有InputMap。因此,对于一个聚焦的组件,有一个不同的InputMap,而不是它没有聚焦但是在一个窗口内。

- 请注意,不带参数调用getInputMap()只是getInputMap(WHEN_FOCUSED)的便捷方法。 -

第2步:

.put(KeyStroke.getKeyStroke("ENTER"), "none");

现在我们有了正确的InputMap,我们想要把它放进去吧!?那么我们放入什么呢?嗯,这是一张地图,因此需要

InputMap KeyStroke,在这种情况下,我们通过调用KeyStroke.getKeyStroke("ENTER")指定了ENTER键。

String,其中包含Action的名称。

InputMap通常与ActionMap一起使用。 InputMap中的ActionMap中的。我们为InputMap提供了 "none",因为Action中没有"none" ActionMap,所以没有会发生。

总而言之,当按下ENTER键时,我们已告诉JTable 不执行任何操作

关于键绑定的更多信息here

我希望这会有所帮助:)

答案 1 :(得分:0)

记住这不仅仅是表格,如果你在一个表格中进行编辑,编辑将是一个收听密钥商店而不是表格的人。 所以它比桌子更大的问题。 Read about default key bindings