Заполнение JavaFX ComboBox или ChoiceBox из перечисления
Есть ли способ заполнить JavaFX ComboBox
или ChoiceBox
всеми перечислениями enum?
Вот что я пробовал:
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;
}
}
}
В другом классе, я пытаюсь заполнить ComboBox
:
ComboBox<Test.Status> cbxStatus = new ComboBox<>();
cbxStatus.setItems(Test.Status.values());
Но я получаю сообщение об ошибке: incompatible types: Status[] cannot be converted to ObservableList<Status>
Я, очевидно, получаю ту же проблему с ChoiceBox
.
Ответы
Ответ 1
Если для setItems требуется ObservableList, вы должны указать его вместо массива.
Попробуйте следующее:
ComboBox<Status> cbxStatus = new ComboBox<>();
cbxStatus.setItems( FXCollections.observableArrayList( Status.values()));
Изменить: решение James_D (см. комментарий) является предпочтительным:
cbxStatus.getItems().setAll(Status.values());
Ответ 2
Для этого я использовал 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>
public enum Type {
ABC("abc"),DEF("def"),GHI("ghi");
private String name;
private Type(String theType) {
this.name = theType;
}
}