TableView的单元格中的ChoiceBox只能通过自定义回调

时间:2015-03-05 14:54:25

标签: javafx javafx-2 tableview

我一直在使用自定义单元工厂在ChoiceBox的{​​{1}}单元格中显示TableView,即

TableColumn

someColumn.setCellFactory(new DayCellFactory()); 实施DayCellFactory(使用Callbackcall方法),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()出现。

0 个答案:

没有答案