您提到的教程使用PropertyValueFactory。那在這裏不適用的,只有內省一個給定的類,但如果你看看文檔該類包括以下長型:
TableColumn<Person,String> firstNameCol = new TableColumn<Person,String>("First Name");
firstNameCol.setCellValueFactory(new Callback<CellDataFeatures<Person, String>, ObservableValue<String>>() {
public ObservableValue<String> call(CellDataFeatures<Person, String> p) {
// p.getValue() returns the Person instance for a particular TableView row
return p.getValue().firstNameProperty();
}
});
}
所以,你可以使用相同的概念,你的數據類從數據對象的用戶對象中檢索相應的字段:
firstNameCol.setCellValueFactory(new Callback<CellDataFeatures<Data, String>, ObservableValue<String>>() {
public ObservableValue<String> call(CellDataFeatures<Data, String> data) {
// data.getValue() returns the Data instance for a particular TableView row
return data.getValue().getUser().firstNameProperty();
}
});
}
有些醜的可以,如果你使用Java 8個Lambda表達式被刪除。
如果您的用戶對象不具有價值屬性訪問,但只有干將,爲PropertyValueFactory文檔中描述你可以用結果在ReadOnlyObjectWrapper:
return new ReadOnlyObjectWrapper(data.getValue().getUser().getFirstName());
,如果你的表這很好不可編輯,並且您不希望表數據自動更改如果基礎字段發生更改,則優先使用基於屬性訪問器的方法。
一種方法是針對每種數據類型使用不同的「TableView」,並將表視圖切換到場景圖中或切換出場景圖(而不是使用單個表視圖並替換其數據,我認爲這是你在提問中提出)。 –