从枚举中填充 JavaFX ComboBox 或 ChoiceBox
Populating JavaFX ComboBox or ChoiceBox from enum
有没有办法用枚举的所有枚举填充 JavaFX ComboBox
或 ChoiceBox
?
这是我尝试过的:
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;
}
}
}
在另一个 class 中,我正在尝试填充 ComboBox
:
ComboBox<Test.Status> cbxStatus = new ComboBox<>();
cbxStatus.setItems(Test.Status.values());
但是我得到一个错误:incompatible types: Status[] cannot be converted to ObservableList<Status>
我显然遇到了与 ChoiceBox
相同的问题。
如果 setItems 需要一个 ObservableList,那么您必须给它一个而不是一个数组。
试试这个:
ComboBox<Status> cbxStatus = new ComboBox<>();
cbxStatus.setItems( FXCollections.observableArrayList( Status.values()));
编辑:James_D(见评论)的解决方案是首选:
cbxStatus.getItems().setAll(Status.values());
我为此使用了 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;
}
}
有没有办法用枚举的所有枚举填充 JavaFX ComboBox
或 ChoiceBox
?
这是我尝试过的:
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;
}
}
}
在另一个 class 中,我正在尝试填充 ComboBox
:
ComboBox<Test.Status> cbxStatus = new ComboBox<>();
cbxStatus.setItems(Test.Status.values());
但是我得到一个错误:incompatible types: Status[] cannot be converted to ObservableList<Status>
我显然遇到了与 ChoiceBox
相同的问题。
如果 setItems 需要一个 ObservableList,那么您必须给它一个而不是一个数组。
试试这个:
ComboBox<Status> cbxStatus = new ComboBox<>();
cbxStatus.setItems( FXCollections.observableArrayList( Status.values()));
编辑:James_D(见评论)的解决方案是首选:
cbxStatus.getItems().setAll(Status.values());
我为此使用了 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;
}
}