2017-04-06 52 views
1

我正在創建具有不同類別的應用程序,例如UserProductDonorCar。這些類別中的每一個都存儲將在JavaFX TableView- User類別中顯示的相關信息,例如具有String nameint userIDJavaFX:用不同類別的數據填充TableView

我把所有這些收集在一個名爲Data的課程中,該課程採用上述類並存儲它們。我最終得到了一個ArrayList<Data>,其中每個索引存儲上面的四個類。

如果我根據ArrayList<Data>作出ObservableArrayList如何從存儲在Data類中的每個類中檢索信息?我正在關注Oracle's own tutorial here,但它只是說明您想要存儲單個課程信息的情況。

謝謝!

+0

一種方法是針對每種數據類型使用不同的「TableView」,並將表視圖切換到場景圖中或切換出場景圖(而不是使用單個表視圖並替換其數據,我認爲這是你在提問中提出)。 –

回答

1

您提到的教程使用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()); 

,如果你的表這很好不可編輯,並且您不希望表數據自動更改如果基礎字段發生更改,則優先使用基於屬性訪問器的方法。

相關問題