我想了解從以下源的一些代碼:瞭解添加一個ChangeListener在TableView中
http://code.makery.ch/library/javafx-8-tutorial/part3/
具體的線路我仍然好奇的是以下之一:
personTable.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> showPersonDetails(newValue));
我相信我對javadoc的第一次理解是不正確的;尤其是在這部分([...].selectedItemProperty().[...]
):
我問自己,爲什麼我們只添加一個監聽器,而我們可能有幾個數據對象,但現在我的理解如下,這將是很好的知道,如果它是正確的:
該文檔的含義是「selectedItem」本身是屬性(而不是底層數據!),它表示在運行時選擇/選擇更改的行,因此我們的偵聽器的更改方法是當用戶更改選定的行時引發。然後與底層數據模型的同步通過ChangeListener
接口的change(...)
方法進行,該方法從udnerlying數據模型獲取相應的數據對象以進行工作。所以根據我的理解,如果我沒有在我的TableView上執行正確的setItems(...)
,我可能會引發異常。
到目前爲止這是否正確?
如果是,我有一個後續問題:ReadOnlyObjectProperty
既執行Observable
和ObservableValue
,它們都有方法addListener
。通過檢查兩個可能的函數接口中的兩個方法的參數列表來正確解析Lambda表達式是否正確,這兩個函數接口可能是參數爲addListener(...)
方法之一的參數?這一點對我來說似乎相當複雜。
對不起,我很遲纔回復,非常感謝你向我澄清這一點!顯然,我認爲現在看來,這個例外部分直到最後。你說「應用程序員可用性的觀點」;我不確定我應該深入到多深,哪裏沒有任何意義。在這一點上,我認爲對於我來說,看看處理選擇和選擇變化如何處理我現在所處的「表面」之下的代碼是正常的嗎? – Wolfone