我是JavaFX的新手,我的视图中有两个表,tableA
和tableB
。我为两个表制作了Change Listeners。它们如下所示:
this.tableA.getSelectionModel().selectedItemProperty().addListener
(New ChangeListener<Person> () {
@Override
public void changed( ObservableValue< ? extends Person> observable,Perosn oldValue, Person newValue ) {
updateButtons("View-A");
}
});
this.tableB.getSelectionModel().selectedItemProperty().addListener
(New ChangeListener<Car> () {
@Override
public void changed( ObservableValue< ? extends Car> observable,Car oldValue, Car newValue ) {
updateButtons("View-B");
}
});
所以基本上发生的事情是用户从Person
中选择TableA
,它会显示所选人在Car
中拥有的所有TableB
个对象。然后他们可以选择每辆车并通过不同的按钮更改某些属性。选择汽车之后但是,如果我决定要选择其他人。当我从TableA
中选择某个人时,该程序仍会调用TableB
更改侦听器?
答案 0 :(得分:1)
我希望在你描述的场景中调用两个监听器。当表A中的选择发生更改时,您将替换表B中显示的项目。如果先前在表B中选择了某个项目,则该表格中选择的项目必然会发生更改。 (无论现在选择什么,它都不是之前选择的,因为该项不再在表中。)所以我认为这是你想要的行为,否则此时UI将处于不一致的状态。 / p>
当您更改表B中显示的项目时,您可能还想清除选择:
this.tableA.getSelectionModel().selectedItemProperty().addListener
(new ChangeListener<Person> () {
@Override
public void changed( ObservableValue< ? extends Person> observable,Person oldValue, Person newValue ) {
// update items shown in table B
tableB.getSelectionModel().clearSelection();
}
});
然后确保表B的选择模型的监听器处理newValue适当为null的情况。