如何让 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 都有几个 InputMaps
。 InputMap
基本上是一种将 KeyStrokes
映射到操作的方法。
getInputMap()
方法接受一个参数 condition
,它可以是三个值之一,WHEN_IN_FOCUSED_WINDOW
、WHEN_FOCUSED
和 WHEN_ANCESTOR_OF_FOCUSED_COMPONENT
。这些是在 JComponent
class 中声明的常量,对应于组件可能处于的不同状态。JComponent
的每个状态都有一个 InputMap
。因此,聚焦的组件与未聚焦但位于 window 内的组件存在不同的 InputMap
。
-- 请注意,不带参数调用 getInputMap()
只是 getInputMap(WHEN_FOCUSED)
的一种便捷方法。 --
第 2 步:
.put(KeyStroke.getKeyStroke("ENTER"), "none");
现在我们有了权利InputMap
,我们想把东西放进去吧!?那么我们在里面放什么呢?好吧,这是一张地图,所以它需要一个 key 和一个 value。
在 InputMap
中,key 是 KeyStroke
,在这种情况下,我们通过调用 KeyStroke.getKeyStroke("ENTER")
指定了 ENTER 键。
值 是一个 String
,它给出了 Action
.
的名称
InputMap
通常与 ActionMap
结合使用。 InputMap
中的 value 是 ActionMap
中的 key。我们为 InputMap
提供了 值 "none"
,并且由于 ActionMap
中没有名为 "none"
的 Action
], 什么都不会发生。
所以,总而言之,我们告诉 JTable
在按下 ENTER 键时 什么都不做。
有关键绑定的更多信息here。
希望对您有所帮助:)
记住这不仅仅是 Table,如果您在 Table 中编辑,编辑器将是聆听密钥存储而不是 Table 的人。
所以它是一个比 table 更大的问题。
Read about default key bindings
我在我的 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 都有几个 InputMaps
。 InputMap
基本上是一种将 KeyStrokes
映射到操作的方法。
getInputMap()
方法接受一个参数 condition
,它可以是三个值之一,WHEN_IN_FOCUSED_WINDOW
、WHEN_FOCUSED
和 WHEN_ANCESTOR_OF_FOCUSED_COMPONENT
。这些是在 JComponent
class 中声明的常量,对应于组件可能处于的不同状态。JComponent
的每个状态都有一个 InputMap
。因此,聚焦的组件与未聚焦但位于 window 内的组件存在不同的 InputMap
。
-- 请注意,不带参数调用 getInputMap()
只是 getInputMap(WHEN_FOCUSED)
的一种便捷方法。 --
第 2 步:
.put(KeyStroke.getKeyStroke("ENTER"), "none");
现在我们有了权利InputMap
,我们想把东西放进去吧!?那么我们在里面放什么呢?好吧,这是一张地图,所以它需要一个 key 和一个 value。
在 InputMap
中,key 是 KeyStroke
,在这种情况下,我们通过调用 KeyStroke.getKeyStroke("ENTER")
指定了 ENTER 键。
值 是一个 String
,它给出了 Action
.
InputMap
通常与 ActionMap
结合使用。 InputMap
中的 value 是 ActionMap
中的 key。我们为 InputMap
提供了 值 "none"
,并且由于 ActionMap
中没有名为 "none"
的 Action
], 什么都不会发生。
所以,总而言之,我们告诉 JTable
在按下 ENTER 键时 什么都不做。
有关键绑定的更多信息here。
希望对您有所帮助:)
记住这不仅仅是 Table,如果您在 Table 中编辑,编辑器将是聆听密钥存储而不是 Table 的人。 所以它是一个比 table 更大的问题。 Read about default key bindings