0

我在我的 JFrame 中设置了一个默认按钮操作,但是当我专注于 JTable 时它不会执行。

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

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

4

2 回答 2

0

请记住,这不仅仅是表格,如果您在表格中进行编辑,编辑器将是聆听 Key Stores 而不是表格的人。所以这是一个比桌子更大的问题。 阅读默认键绑定

于 2016-03-18T17:14:14.167 回答
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. AnInputMap基本上是一种映射KeyStrokes到动作的方式。

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

--请注意,getInputMap()不带参数的调用只是getInputMap(WHEN_FOCUSED). --

第2步:

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

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

在 anInputMap中,是 a KeyStroke,在这种情况下,我们通过调用 来指定 ENTER 键KeyStroke.getKeyStroke("ENTER")

是 a String,它给出了a的名称Action

AnInputMap通常与 an 一起使用ActionMap。an 中的是 an中InputMapActionMap。我们为我们InputMap提供了value "none",并且由于 没有包含Action调用,所以什么都不会发生。"none"ActionMap

所以,总而言之,我们已经告诉了当按下 ENTER 键时JTable什么都不做。

更多关于键绑定的信息在这里

我希望这有帮助 :)

于 2016-03-18T17:06:33.753 回答