1 回答
TA贡献1883条经验 获得超3个赞
嗯,这很简单,我只是完全删除了它!这是最终结果,只需传递一个实体类和一个列表,其余的由表来处理!
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);
}
}
缺点是这将在类中显示带有实际属性名称的列标题(并不总是非常用户友好)。欢迎任何自动在列标题中放置更好的东西的建议!
编辑
对于我的列名,我最终创建了一个名为 FriendlyName 的自定义注释,只有一个值参数。我现在像这样填充列标题:
FriendlyName friendlyName = field.getAnnotation(FriendlyName.class);
TableColumn column = new TableColumn(friendlyName.value());
添加回答
举报