このサンプルでは、リスナーを間違って割り当てています。あなたが書いた:
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();
}
});
このプロパティ (フォーカスされたプロパティ) は、コントロールのフォーカスされた状態に応答します (青い境界線 - カスピアン スタイルの場合、およびモデナ スタイルの場合は赤い境界線)。
しかし、評価中に、バグがあることがわかったので(コメントを参照)、その問題の回避策を提案します:
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();
}
}
});
同様のロジックをそこに貼り付けます..