我在JFrame中设置了一个默认按钮动作,但是当我专注于JTable时它没有被执行。
如何让JTable忽略回车键,以便表单可以执行默认按钮?
编辑:更多信息:我的JFrame内部是动态的,根据某些状态它可以有不同的组件:有时它会有一个插入和更新按钮,有时它可以有一个选择按钮。 根据状态,可以选择不同的按钮作为默认按钮。 JTable是一个在各种框架中使用的通用组件 - 它甚至不知道tere是否是按钮,它只是选择了其中一条线。 所有部分放在一起(jtable,按钮等),默认按钮定义,我希望在按下Enter时触发,而不是JTable的列更改为其他列。
答案 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都有一些InputMaps
。 InputMap
基本上是一种将KeyStrokes
映射到操作的方法。
getInputMap()
方法接受参数condition
,该参数可以是三个值中的一个,WHEN_IN_FOCUSED_WINDOW
,WHEN_FOCUSED
和WHEN_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