在JTable中删除标准输入键绑定(按Enter键选择下一行)的最简单和最快方法是什么?
这就是我的尝试
table.getInputMap().put(KeyStroke.getKeyStroke("ENTER"), null);
但它不起作用。我假设我们必须以某种方式为每个单元格而不是表格本身。
答案 0 :(得分:3)
JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT
和JComponent.WHEN_IN_FOCUSED_WINDOW
具有输入击键的值。所以你想得到它们两个
更正:您需要获取InputMap
WHEN_ANCESTOR_OF_FOCUSED_COMPONENT
InputMap iMap1 =
table.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
//InputMap iMap2 =
// table.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
然后,您要将地图的值设置为"none"
,而不是null
,如How to Use Key Bindings中所述。
要使组件忽略它通常响应的键,您可以使用特殊操作名称" none"。例如,以下代码使组件忽略F2键。
component.getInputMap().put(KeyStroke.getKeyStroke("F2"), "none");
所以就这样做:
KeyStroke stroke = KeyStroke.getKeyStroke("ENTER");
iMap1.put(stroke, "none");
//iMap2.put(stroke, "none");
另请注意,当您在没有任何参数的情况下执行getInputMap()
时,它与getInputMap(JComponent.WHEN_FOCUSED)
基本相同。在JTable
的情况下,InputMap
的输入击键没有值。
在How to Use Key Bindings了解详情。您将对不同的InputMaps
更新:更正(通过或// commented out
进行更正>>
您只需为InputMap
JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT
设置它
更新:简称是
table.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT)
.put(KeyStroke.getKeyStroke("ENTER"), "none");
答案 1 :(得分:1)
这似乎是最方便的方式:
table.registerKeyboardAction(
null,
KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0),
JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT
);
指定一个操作替换null
ActionListener
调用或e -> someMethod()
替换JDK 1.8
答案 2 :(得分:0)
更新:
David Kroukamp解决方案:
private void createKeybindings(JTable table) {
table.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "Enter");
table.getActionMap().put("Enter", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent ae) {}
});
}
而且你应该够了:
table.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "Enter");
table.getActionMap().put("Enter",null);
我不知道是否可以使用null
,您可以使用匿名类代替......