我有一个 JavaFX 应用程序,我正在尝试将枚举的所有值从 FXML 映射到组合框。
像下面这样的东西工作得很好,但是,我正在寻找一个更通用的解决方案,我不需要手动列出枚举的所有可能值。
<ComboBox>
<items>
<FXCollections fx:factory="observableArrayList">
<MyEnum fx:constant="VALUE1"/>
<MyEnum fx:constant="VALUE2"/>
</FXCollections>
</items>
</ComboBox>
最佳答案
如果没有一些额外的代码,这是不可能的,因为无法一次将多个对象添加到列表中,并且初始化列表也是不可能的。
您可以创建一个提供静态
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>
关于javafx - 将枚举值绑定(bind)到 FXML 中的 Combox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52021191/