我的应用程序中有两个tableView,我希望每次只启用一个。
例如我有tableView1和tableView2
如果选择(或聚焦)tableView2,则tableView1清除选择。
我尝试了一些代码,但它们似乎没有用。
mainTableView2.focusModelProperty().addListener(new ChangeListener() {
@Override
public void changed(ObservableValue ov, Object t, Object t1) {
mainTableView1.getSelectionModel().clearSelection();
}
});
答案 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();
}
}
});
粘贴任何类似的逻辑..