两个tableView和一个JavaFx选择

时间:2013-02-19 19:13:01

标签: java javafx-2 javafx

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

例如我有tableView1和tableView2

如果选择(或聚焦)tableView2,则tableView1清除选择。

我尝试了一些代码,但它们似乎没有用。

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

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

1 个答案:

答案 0 :(得分:4)

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

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

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

这意味着,TableView有一个改变焦点项目或单元格的策略,它允许更改焦点programmaticaly,跟踪焦点项目等...并且你在上添加监听器来改变它策略,实际上通常不会改变。如果要跟踪焦点的表项,则应该在该焦点模型的属性上添加侦听器。

你想要的应该是这样的:

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

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

此属性(聚焦属性)响应聚焦控制状态(蓝色边框 - 用于caspian样式,红色边框用于Modena样式)。

但是,在评估期间,我发现有一个错误(请参阅评论),因此我建议针对该问题采取解决方法:

    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();
            }
        }
    });

粘贴任何类似的逻辑..