1

我的应用程序中有两个 tableView,我希望每次只启用一个。

例如我有 tableView1 和 tableView2

如果 tableView2 被选中(或聚焦)然后 tableView1 清除选择。

我尝试了一些代码,但它们似乎不起作用。

mainTableView2.focusModelProperty().addListener(new ChangeListener() {

            @Override
            public void changed(ObservableValue ov, Object t, Object t1) {
                mainTableView1.getSelectionModel().clearSelection();
            }
        });
4

1 回答 1

4

在此示例中,您错误地分配了侦听器。你写过:

mainTableView2.focusModelProperty().addListener(new ChangeListener() {

        @Override
        public void changed(ObservableValue ov, Object t, Object t1) {
            mainTableView1.getSelectionModel().clearSelection();
        }
    });

这意味着,TableView 具有更改焦点项目或单元格的策略,它允许以编程方式更改焦点、跟踪焦点项目等......并且您在更改该策略时添加侦听器,实际上通常不会更改。如果要跟踪表格的焦点项,则应在该焦点模型的属性上添加侦听器。

你想要的应该是这样的:

mainTableView2.focusedProperty().addListener(new ChangeListener() {

        @Override
        public void changed(ObservableValue ov, Object t, Object t1) {
            mainTableView1.getSelectionModel().clearSelection();
        }
    });

此属性(focused 属性)响应控制的焦点状态(蓝色边框 - 用于里海风格,红色边框用于摩德纳风格)。

但是,在评估过程中,我发现有一个错误(见评论),所以我建议解决这个问题:

    scene.focusOwnerProperty().addListener(new ChangeListener<Node>() {
        @Override
        public void changed(ObservableValue<? extends Node> ov, Node t, Node t1) {

            if (t1 == table2) {
                table1.getSelectionModel().clearSelection();
            }
            if (t1 == table1) {
                table2.getSelectionModel().clearSelection();
            }
        }
    });

粘贴任何类似的逻辑..

于 2013-02-19T20:09:46.180 回答