我一直在使用自定义单元工厂在ChoiceBox
的{{1}}单元格中显示TableView
,即
TableColumn
someColumn.setCellFactory(new DayCellFactory());
实施DayCellFactory
(使用Callback
和call
方法),updateItem
(以及单元格)的值被绑定到财产的价值。 ChoiceBox
显示枚举ChoiceBox
的潜在值。
Day
我以为我可以通过简单地使用
来减少代码class DayCellFactory implements Callback<TableColumn<DayPeriod, Day>, TableCell<DayPeriod, Day>> {
private final static ObservableList<Day> list = FXCollections.observableArrayList();
static {
for (Day day : Day.values()) {
list.add(day);
}
}
@Override
public TableCell<DayPeriod, Day> call (TableColumn<DayPeriod, Day> column) {
return new TableCell<DayPeriod, Day>() {
@Override
public void updateItem (Day item, boolean empty) {
super.updateItem(item, empty);
if (!empty) {
ObservableValue<Day> obsVal = getTableColumn().getCellObservableValue(getIndex());
ObjectProperty<Day> objProp = (ObjectProperty<Day>) obsVal;
ChoiceBox<Day> choice = new ChoiceBox<>(list);
choice.valueProperty().bindBidirectional(objProp);
setGraphic(choice);
}
}
};
}
}
(根据需要定义并填充someColumn.setCellFactory(ChoiceBoxTableCell.forTableColumn(list));
)但是生成的单元格看起来(并且表现得像)显示属性的list
值的简单标签 - 是的,我确实点击了那里,但没有{ {1}}出现。删除此行没有任何区别。删除单元格值工厂将导致不显示任何值。
我想这个简单的方法没有发生任何约束,但这也许可以解决。似乎很奇怪,没有toString()
出现。