我一直在寻找解决问题的方法,但我找不到直接适用于我的情况的解决方案。基本上,我有一些单独的枚举类,我想将它们的字符串值存储在一个组合框中供用户选择,但是只使用ComboBox.getItems().setAll(Enum.values());
不会填充列表。
我的代码如下,所有这些都在我的github上,以减少这篇文章的混乱。我还将包含我的GUI的屏幕截图以及如何在JavaFX中分配它,也许这就是问题所在。提前谢谢!
git:https://github.com/jparr721/Blue-Box2/tree/master/src/blueBox/GUI
控制器类的代码:
public class RentGameDialogController extends RentalStoreGUIController implements Initializable{
@FXML private TextField nameField, rentedOn, dueBack;
String name;
Date dateRentedOn, dateDue;
GregorianCalendar rented, due;
@FXML ComboBox<GameType> cbGame;
@FXML ComboBox<PlayerType> cbConsole;
@FXML Button cancel, addToCart;
@FXML int counter = 0;
private Stage currentStage;
@Override
public void initialize(URL location, ResourceBundle resources) {
rentedOn = new TextField();
dueBack = new TextField();
cbGame = new ComboBox<>();
}
@FXML
public void handleGameComboBox() {
cbGame.getItems().setAll(GameType.values());
}
枚举类的代码:
public enum GameType {
THE_WITCHER("The Witcher 3"),
CALL_OF_DUTY_AW("Call of Duty: Advanced Warfare"),
CALL_DUTY_BLOP3("Call of Duty: Black Ops 3"),
CALL_OF_DUTY_IW("Call of Duty: Infinite Warfare"),
THE_ELDER_SCROLLS("The Elder Scrolls IV: Skyrim");
private String game;
GameType(String game) {
this.game = game;
}
public String GameType() { return game; }
@Override public String toString() { return game; }
}
答案 0 :(得分:0)
首先,永远不要初始化由@FXML
注入的字段。因此,请删除initialize()
方法中当前的所有代码。
ObservableList
定义采用varargs或数组参数的addAll(...)
方法。所以你需要的只是
@Override
public void initialize(URL location, ResourceBundle resources) {
cbGame.getItems().addAll(GameType.values());
}
答案 1 :(得分:0)
如先前答案中所述,在您的控制器类中:
@Override
public void initialize(URL url, ResourceBundle rb) {
cbGame.getItems().addAll(GameType.values());
}
并确保在控制器中
@FXML
private ComboBox<?> cbGame;
设置为:
@FXML
private ComboBox<GameType> cbGame