【问题标题】:Disable default keybinding of JTable for a single column为单个列禁用 JTable 的默认键绑定
【发布时间】:2015-05-26 11:55:33
【问题描述】:

我在 JTable 列中使用自动完成功能,该列使用 updown 键移动,以便 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
        }
      });

现在我已经在 if 代码中使用此代码来禁用 up 键,但一旦控制退出 if 条件,我想要默认的 up 键行为,但不会发生

【问题讨论】:

  • 覆盖监听器
  • 我已经这样做了,但是它对所有列都被禁用,而不是针对特定的..我为此使用了 INPUTMAP 和 ActionMap 类
  • 如果你能提供一些代码,人们可能会帮助你。

标签: java swing jtable


【解决方案1】:

列和行的敏感性对于 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”但所有列都禁用了
  • 有趣。也许我没有完全理解你的问题。更新的 SSCCE 将非常有帮助。
【解决方案2】:

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

这意味着 JTable 具有焦点之外的某些组件。因此,您会将自定义键绑定添加到该组件,而不是 JTable。那么这些键绑定将优先于表中的键绑定。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-14
    • 1970-01-01
    • 2013-09-17
    • 2023-03-31
    • 1970-01-01
    相关资源
    最近更新 更多