使用JavaFX中的枚举类填充组合框?

时间:2016-11-15 21:47:20

标签: java javafx combobox enums

我一直在寻找解决问题的方法,但我找不到直接适用于我的情况的解决方案。基本上,我有一些单独的枚举类,我想将它们的字符串值存储在一个组合框中供用户选择,但是只使用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; }

}

图像: https://i.stack.imgur.com/chTYt.png

2 个答案:

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