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_WINDOW
,WHEN_FOCUSED
和WHEN_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中InputMap
的键ActionMap
。我们为我们InputMap
提供了value "none"
,并且由于 没有包含Action
调用,所以什么都不会发生。"none"
ActionMap
所以,总而言之,我们已经告诉了当按下 ENTER 键时JTable
什么都不做。
更多关于键绑定的信息在这里。
我希望这有帮助 :)