如何让 JTable 忽略回车键?

How I can make the JTable ignore the enter key?

我在我的 JFrame 中设置了默认按钮操作,但是当我聚焦在 JTable 中时它没有执行。

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

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

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 class 中声明的常量,对应于组件可能处于的不同状态。JComponent 的每个状态都有一个 InputMap。因此,聚焦的组件与未聚焦但位于 window 内的组件存在不同的 InputMap

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

第 2 步:

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

现在我们有了权利InputMap,我们想把东西放进去吧!?那么我们在里面放什么呢?好吧,这是一张地图,所以它需要一个 key 和一个 value

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

是一个 String,它给出了 Action.

的名称

InputMap 通常与 ActionMap 结合使用。 InputMap 中的 valueActionMap 中的 key。我们为 InputMap 提供了 "none",并且由于 ActionMap 中没有名为 "none"Action ], 什么都不会发生。

所以,总而言之,我们告诉 JTable 在按下 ENTER 键时 什么都不做

有关键绑定的更多信息here

希望对您有所帮助:)

记住这不仅仅是 Table,如果您在 Table 中编辑,编辑器将是聆听密钥存储而不是 Table 的人。 所以它是一个比 table 更大的问题。 Read about default key bindings