web-dev-qa-db-fra.com

Remplissage de JavaFX ComboBox ou ChoiceBox à partir de enum

Existe-t-il un moyen de renseigner une ComboBox ou ChoiceBox JavaFX avec toutes les énumérations d'une énumération?

Voici ce que j'ai essayé:

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;
        }
    }
}

Dans une autre classe, j'essaie de renseigner une ComboBox:

    ComboBox<Test.Status> cbxStatus = new ComboBox<>();
    cbxStatus.setItems(Test.Status.values());

Mais je reçois une erreur: incompatible types: Status[] cannot be converted to ObservableList<Status>

J'obtiens évidemment le même problème avec un ChoiceBox.

14
Jérôme

Si setItems nécessite une ObservableList, vous devez lui en donner une au lieu d'un tableau.

Essaye ça:

ComboBox<Status> cbxStatus = new ComboBox<>();
cbxStatus.setItems( FXCollections.observableArrayList( Status.values()));

Edit: La solution de James_D (voir le commentaire) est la solution préférée:

cbxStatus.getItems().setAll(Status.values());
19
Roland

J'ai utilisé FXML pour cela. Mon enum a un constructeur

<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>

public enum Type {

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

    private String name;

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

}
2
rizcan