将枚举值绑定到FXML中的Combox

时间:2018-08-25 21:01:30

标签: javafx enums combobox fxml

我有一个JavaFX应用程序,并且试图将枚举的所有值从FXML映射到Combobox。

类似下面的方法可以很好地工作,但是,我正在寻找一种更通用的解决方案,无需手动列出枚举的所有可能值。

<ComboBox>
     <items>
         <FXCollections fx:factory="observableArrayList">
              <MyEnum fx:constant="VALUE1"/>
              <MyEnum fx:constant="VALUE2"/>
          </FXCollections>
     </items>
</ComboBox>

1 个答案:

答案 0 :(得分:1)

如果没有一些其他代码,这是不可能的,因为无法同时向列表添加多个对象,也无法初始化列表。

您可以创建一个提供static getter / setter方法的帮助程序类。此方法可以使用反射来添加枚举常量:

public class EnumUtil {
    /* getter needed for FXMLLoader */
    public static Class<?> getEnumClass(ObservableList list) {
        return list.isEmpty() ? null : list.get(0).getClass();
    }

    public static <T extends Enum<T>> void setEnumClass(ObservableList<? super T> list, Class<T> enumClass) {
        if (!enumClass.isEnum()) {
            throw new IllegalArgumentException(enumClass.getName() + " is not a enum type");
        }
        list.addAll(enumClass.getEnumConstants());
    }
}

fxml

<ComboBox>
     <items>
         <!-- fill combobox with constants from KeyCode -->
         <FXCollections fx:factory="observableArrayList" EnumUtil.enumClass="javafx.scene.input.KeyCode"/>
     </items>
</ComboBox>