我有一个JavaFX应用程序,并且试图将枚举的所有值从FXML映射到Combobox。
类似下面的方法可以很好地工作,但是,我正在寻找一种更通用的解决方案,无需手动列出枚举的所有可能值。
<ComboBox>
<items>
<FXCollections fx:factory="observableArrayList">
<MyEnum fx:constant="VALUE1"/>
<MyEnum fx:constant="VALUE2"/>
</FXCollections>
</items>
</ComboBox>
答案 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());
}
}
<ComboBox>
<items>
<!-- fill combobox with constants from KeyCode -->
<FXCollections fx:factory="observableArrayList" EnumUtil.enumClass="javafx.scene.input.KeyCode"/>
</items>
</ComboBox>