【发布时间】:2017-03-21 16:16:13
【问题描述】:
我正在尝试从以下来源理解一些代码:
http://code.makery.ch/library/javafx-8-tutorial/part3/
我仍然好奇的具体行是以下一行:
personTable.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> showPersonDetails(newValue));
我相信我对javadoc的最初理解是不正确的;尤其是这部分([...].selectedItemProperty().[...]):
我问自己为什么我们只添加一个侦听器,而我们可能有多个数据对象,但现在我的理解如下,很高兴知道它是否正确:
文档的意思是“selectedItem”本身是一个属性(不是底层数据!),它表示在运行时选择/选择更改的行,因此当用户调用时我们的监听器的更改方法更改选定的行。然后通过ChangeListener 接口的change(...) 方法与底层数据模型进行同步,该方法从底层数据模型中获取相应的数据对象以进行处理。所以根据我的理解,如果我没有在我的 TableView 上执行正确的setItems(...),我可能会引发异常。
到目前为止这是正确的吗?
如果是,我有一个后续问题:ReadOnlyObjectProperty 实现了Observable 和ObservableValue,它们都有addListener 的方法。通过检查两个可能的功能接口的两个方法的参数列表来正确解析 Lambda-Expression 是否正确,这两个方法可能是 addListener(...) 方法之一的参数?这一点在我看来相当复杂。
【问题讨论】:
标签: java tableview changelistener