禁用单个列的JTable的默认键绑定

时间:2015-05-26 11:55:33

标签: java swing jtable

我在我的JTable列中使用自动填充功能,使用 up down 键移动JTable如何我可以为该列禁用JTable的上下键绑定,并再次恢复下一列的功能。

table.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT)
     .put(KeyStroke.g   etKeyStroke(KeyEvent.VK_UP, 0), "UP");
table.getActionMap()
     .put("UP", new AbstractAction() {
        @Override
        public void actionPerformed(ActionEvent ae) {
        //do something on JTable enter pressed
        }
      });

现在我已经使用了这个代码,如果编码禁用 up 键但是一旦控制出来,如果条件我想要up键的默认行为,这是不愉快的

2 个答案:

答案 0 :(得分:0)

JTables的列和行灵敏度是一个棘手的问题;但它是可查询的。 TableColumn个对象不会扩展Component,因此您不能简单地向它们添加动作侦听器。但是,只需添加一次:

new AbstractAction() {
    @Override
    public void actionPerformed(ActionEvent ae) {
        //Following line is untested code, but you get the idea:
        if(!Arrays.asList(table.getSelectedColumns()).contains([your column number]) {
            //perform up action
        }
    }
}

应该完成这项工作,并且它可能比向JTable添加和删除匿名类更有效。 (对于Swing / AWT,列看起来都一样。)

我再次为没有亲自测试这个代码而道歉,我正在出门进行为期两天的旅行。我的核心观点是,您最好的选择是在调用方法后使用简单的布尔测试查询ActionListener中的列。

答案 1 :(得分:0)

  

我在JTable列中使用自动完成功能

这意味着JTable的一些其他组件具有焦点。因此,您可以将自定义键绑定添加到该组件,而不是JTable。然后,这些密钥绑定将优先于表中的键绑定。