2

controlsfx ライブラリの PropertySheet に CheckComboBox を追加したいと考えています。デフォルトのエディターには ComboBox 実装のみが含まれます。CheckComboBox を追加することは可能ですか? AbstractPropertyEditor で PropertyEditor を実装しようとしましたが、例外が発生しました。

    public static final <T> PropertyEditor<?> createCheckComboBoxEditor(PropertySheet.Item property,
        final Collection<T> choices) {
    final ObservableList<T> result = FXCollections.observableArrayList();
    result.addAll(choices);
    CheckComboBox<T> comboBox = new CheckComboBox<T>(result);
    return new AbstractPropertyEditor<ObservableList<T>, CheckComboBox<T>>(property, comboBox) {

        {
            getEditor().getCheckModel().getCheckedItems().setAll(FXCollections.observableArrayList(choices));                
        }
        @Override
        public void setValue(ObservableList<T> value) {
            getEditor().getCheckModel().getCheckedItems().setAll(value);
        }

        @Override
        protected ObservableValue<ObservableList<T>> getObservableValue() {
            return (ObservableValue<ObservableList<T>>) getEditor().getItems();
        }
    };
}

例外:

Exception in thread "JavaFX Application Thread" java.lang.ClassCastException: com.sun.javafx.collections.ObservableListWrapper cannot be cast to javafx.beans.value.ObservableValue
at configurator.ComboBoxEditor$3.getObservableValue(ComboBoxEditor.java:109)
at org.controlsfx.property.editor.AbstractPropertyEditor.<init>(AbstractPropertyEditor.java:83)
at org.controlsfx.property.editor.AbstractPropertyEditor.<init>(AbstractPropertyEditor.java:67)
at configurator.ComboBoxEditor$3.<init>(ComboBoxEditor.java:85)
at configurator.ComboBoxEditor.createCheckComboBoxEditor(ComboBoxEditor.java:85)
at configurator.ConfiguratorController.lambda$setPropertySheetEditors$7(ConfiguratorController.java:273)
at impl.org.controlsfx.skin.PropertySheetSkin$PropertyPane.getEditor(PropertySheetSkin.java:321)
at impl.org.controlsfx.skin.PropertySheetSkin$PropertyPane.setItems(PropertySheetSkin.java:301)
at impl.org.controlsfx.skin.PropertySheetSkin$PropertyPane.<init>(PropertySheetSkin.java:269)
at impl.org.controlsfx.skin.PropertySheetSkin$PropertyPane.<init>(PropertySheetSkin.java:261)
at impl.org.controlsfx.skin.PropertySheetSkin.buildPropertySheetContainer(PropertySheetSkin.java:223)
at impl.org.controlsfx.skin.PropertySheetSkin.refreshProperties(PropertySheetSkin.java:188)
at impl.org.controlsfx.skin.PropertySheetSkin.lambda$new$65(PropertySheetSkin.java:140)
4

1 に答える 1