Reputation: 27027
Is there a way to populate a JavaFX ComboBox
or ChoiceBox
with all enumerations of a enum ?
Here is what I tried :
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;
}
}
}
In a another class, I'm trying to populate a ComboBox
:
ComboBox<Test.Status> cbxStatus = new ComboBox<>();
cbxStatus.setItems(Test.Status.values());
But I get an error : incompatible types: Status[] cannot be converted to ObservableList<Status>
I obviously get the same problem with a ChoiceBox
.
Upvotes: 26
Views: 30107
Reputation: 57
I used FXML for this. My enum has a constructor
<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;
}
}
Upvotes: 6
Reputation: 44
You can change it to:
ComboBox<Status> cbxStatus = new ComboBox<>();
cbxStatus.getItems().setAll(Arrays.asList(Status.values()));
Upvotes: 0
Reputation: 18415
If setItems requires an ObservableList, then you have to give it one instead of an array.
Try this:
ComboBox<Status> cbxStatus = new ComboBox<>();
cbxStatus.setItems( FXCollections.observableArrayList( Status.values()));
Edit: The solution of James_D (see comment) is the preferred one:
cbxStatus.getItems().setAll(Status.values());
Upvotes: 37