从枚举中填充JavaFX ComboBox或ChoiceBox

Jér*_*ôme 15 java enums combobox javafx

有没有办法填充JavaFX ComboBoxChoiceBox枚举的所有枚举?

这是我尝试过的:

public class Test {

    public enum Status {
        ENABLED("enabled"),
        DISABLED("disabled"),
        UNDEFINED("undefined");

        private String label;

        Status(String label) {
            this.label = label;
        }

        public String toString() {
            return label;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在另一堂课中,我试图填写一个ComboBox:

    ComboBox<Test.Status> cbxStatus = new ComboBox<>();
    cbxStatus.setItems(Test.Status.values());
Run Code Online (Sandbox Code Playgroud)

但是我收到一个错误: incompatible types: Status[] cannot be converted to ObservableList<Status>

我显然遇到了同样的问题ChoiceBox.

Rol*_*and 22

如果setItems需要一个ObservableList,那么你必须给它一个而不是一个数组.

试试这个:

ComboBox<Status> cbxStatus = new ComboBox<>();
cbxStatus.setItems( FXCollections.observableArrayList( Status.values()));
Run Code Online (Sandbox Code Playgroud)

编辑:James_D的解决方案(见评论)是首选的解决方案:

cbxStatus.getItems().setAll(Status.values());
Run Code Online (Sandbox Code Playgroud)

  • 或``cbxStatus.getItems().setAll(Status.values());` (5认同)
  • 有什么方法可以从 FXML 做到这一点吗? (2认同)

小智 6

我为此使用了 FXML。我的枚举有一个构造函数

<ComboBox GridPane.rowIndex="0" GridPane.columnIndex="1">
        <items>
            <FXCollections fx:factory="observableArrayList">
                <Type fx:value="ABC"/>
                <Type fx:value="DEF"/>
                <Type fx:value="GHI"/>
            </FXCollections>
        </items>
    </ComboBox>
Run Code Online (Sandbox Code Playgroud)
public enum Type {

    ABC("abc"),DEF("def"),GHI("ghi");

    private String name;

    private Type(String theType) {
        this.name = theType;
    }

}
Run Code Online (Sandbox Code Playgroud)