1 回答

TA貢獻(xiàn)1883條經(jīng)驗(yàn) 獲得超3個(gè)贊
嗯,這很簡單,我只是完全刪除了它!這是最終結(jié)果,只需傳遞一個(gè)實(shí)體類和一個(gè)列表,其余的由表來處理!
public class EntityTable<T> extends TableView<T>
{
private final Class<T> entityClass;
private final List<T> entityList;
public EntityTable(Class<T> entityClass, List<T> entityList)
{
this.entityClass = entityClass;
this.entityList = entityList;
init();
}
private void init()
{
for (Field field : entityClass.getDeclaredFields())
{
if ((field.getType() != Set.class) && (field.getName().compareTo("id") != 0))
{
TableColumn column = new TableColumn(field.getName());
column.setCellValueFactory(new PropertyValueFactory<>(field.getName()));
getColumns().add(column);
}
}
ObservableList list = FXCollections.observableArrayList(entityList);
setItems(list);
}
}
缺點(diǎn)是這將在類中顯示帶有實(shí)際屬性名稱的列標(biāo)題(并不總是非常用戶友好)。歡迎任何自動(dòng)在列標(biāo)題中放置更好的東西的建議!
編輯
對于我的列名,我最終創(chuàng)建了一個(gè)名為 FriendlyName 的自定義注釋,只有一個(gè)值參數(shù)。我現(xiàn)在像這樣填充列標(biāo)題:
FriendlyName friendlyName = field.getAnnotation(FriendlyName.class);
TableColumn column = new TableColumn(friendlyName.value());
添加回答
舉報(bào)