我是JavaFX的新手,并且在创建TableView包装器时遇到了一些问题。创建一个Tableview应该只是提供数据和一些背景信息一样简单,我在我的模型的class.fields和方法上做了一些注释。
@AsTableColumn(text = "Birthday", index = 2)
private Date birtyday;
@AsTableColumn(text = "Day of death", index = 3)
private Date deathDay;
@AsTableColumn(text = "Alive?", index = 4)
public boolean isAlive() {
return this.getDeathDay().compareTo(new Date()) > 0;
}
列使用以下函数:
private static <S, T> TableColumn<S, T> createTableColumn(Class<T> type, String fieldName, String columnHeader, String index) {
TableColumn<S, T> col = new TableColumn<S, T>(columnHeader);
col.setCellValueFactory(cellData -> {
try {
Object o = getAttribute(fieldName, cellData.getValue());
// Erzeuge eine Property, die das Attribut enthält
@SuppressWarnings("unchecked")
SimpleObjectProperty<T> property = new SimpleObjectProperty<T>((T) o);
return property;
} catch (Exception e) {
throw new RuntimeException(e);
}
});
if (type.equals(Boolean.TYPE))
col.setCellFactory(new Callback<TableColumn<S, T>, TableCell<S, T>>() {
@Override
public TableCell<S, T> call(TableColumn<S, T> p) {
return new CheckBoxTableCell<S, T>();
}
});
col.setId(index);
return col;
}
尽管存在一个事实,但它的作用很好:阅读&#34; true&#34;和&#34;假&#34;在表中很烦人。我想使用CheckBoxTableCell,但我这样做的方式不会工作。所有复选框都是空的。我知道我需要通过.forTableColumn()来指定布尔值的来源,但我尝试的所有内容都存在泛型问题。与TableColumn<S,T>
不同的是TableColumn<S,Boolean>
。
获得一些帮助会很棒。