在此示例中,您错误地分配了侦听器。你写过:
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();
}
}
});
粘贴任何类似的逻辑..