如何更改名为javafx的更改侦听器

时间:2013-12-11 21:22:20

标签: java javafx-2 listener

我是JavaFX的新手,我的视图中有两个表,tableAtableB。我为两个表制作了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更改侦听器?

1 个答案:

答案 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的情况。