javafx - 将枚举值绑定(bind)到 FXML 中的 Combox

标签 javafx enums combobox fxml

我有一个 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/

相关文章:

c# - WPF:带有重置项的组合框

delphi - 在选择时设置组合框文本

java - 如何使 TreeView 中的 TreeItem 确认鼠标单击事件?

java - TableView.setItems 在 java 中抛出 null 异常

ruby-on-rails - 如何在表单中显示可枚举属性的选项?

java - 如何在 Java 中使用反射创建枚举实例?

c# - ComboBox 不会失去焦点

java - 如何在 Java 中使用 ComboBox 数据填充 ArrayList

java - 如何将网页字体字符编码转换为java unicode字符?

c# - 枚举在 web.config 文件中是如何表示的?