【问题标题】:JavaFX not storing string values in ComboBoxJavaFX 不在 ComboBox 中存储字符串值
【发布时间】:2016-11-18 18:58:04
【问题描述】:

我无法将我的字符串值打印到我构建的 GUI ComboBox 中。本质上,每次我将 cbGameComboBox 的值分配给 JavaFX 程序时,当我尝试启动 GUI 时,它都会给我一个非法参数异常。完整代码在我的 GitHub 上:https://github.com/jparr721/Blue-Box2 我需要帮助的代码如下。

控制器类:

public class RentGameDialogController extends RentalStoreGUIController implements Initializable{

@FXML private TextField nameField, rentedOn, dueBack;
String name;
Date dateRentedOn, dateDue;
GregorianCalendar rented, due;
@FXML private ObservableList<String> cbGameOptions;
@FXML private ComboBox<String> cbGame;
@FXML ComboBox<PlayerType> cbConsole;
@FXML Button cancel, addToCart;
int counter = 0;
private Stage currentStage;


@Override
public void initialize(URL location, ResourceBundle resources) {
    cbGameOptions = FXCollections.observableArrayList();

    cbGameOptions.add("The Witcher 3");
    cbGameOptions.add("Call of Duty: Advanced Warfare");
    cbGameOptions.add("Call of Duty: Infinite Warfare");
    cbGameOptions.add("The Elder Scrolls IV: Skyrim");

    cbGame.setItems(cbGameOptions);

}

public void getName(){
    name = nameField.getText();

    try {

        String[] firstLast = name.split(" ");
        String firstName = firstLast[0];
        String lastName = firstLast[1];

    } catch (Exception e){
        e.printStackTrace();
    }
}

public void getRentedOn() throws ParseException {
    DateFormat format = new SimpleDateFormat("MM/dd/yy");
    dateRentedOn = format.parse(rentedOn.getText());
    rented.setTime(dateRentedOn);
}

public void getDueBack() throws ParseException {
    DateFormat format = new SimpleDateFormat("MM/dd/yy");
    dateDue = format.parse(dueBack.getText());
    due.setTime(dateDue);
}


@FXML
public void handleCancelButtonAction (ActionEvent event) {
    currentStage = (Stage) cancel.getScene().getWindow();
    currentStage.close();
}

@FXML
public void addToCartButton (ActionEvent event) {

    currentStage = (Stage) cancel.getScene().getWindow();
    currentStage.close();
}}

这是我将 cbGame 分配给 ComboBox 的 JavaFX 应用程序。

【问题讨论】:

  • 请在您的实际问题中发布 FXML。发布一个没有足够详细信息来简单回答的问题会鼓励人们猜测答案。
  • “它给了我一个非法参数异常” 编辑您的问题并包含该 IllegalArgumentException 的完整堆栈跟踪。它准确地告诉我们(和您)是哪一行代码导致了问题。

标签: java javafx combobox


【解决方案1】:

我知道问题所在,我打开您的代码,发现您没有在 fxml 中使用组合框,所以我用组合框更改它,您使用的是 SplitMenuButton。

 @Override
    public void initialize(URL location, ResourceBundle resources) {
         cbGameOptions = FXCollections.observableArrayList();

            cbGameOptions.add("The Witcher 3");
            cbGameOptions.add("Call of Duty: Advanced Warfare");
            cbGameOptions.add("Call of Duty: Infinite Warfare");
            cbGameOptions.add("The Elder Scrolls IV: Skyrim");

            cbGame.getItems().addAll(cbGameOptions);
    }

【讨论】:

    【解决方案2】:

    好的先把你写cbGame.setItems(cbGameOptions);的地方去掉

    你必须改为

    cbGame.getItems().addAll(cbGameOptions);
    

    【讨论】:

    • 其中任何一个都应该工作。这不是问题。
    【解决方案3】:

    我认为 ObservableList 不需要 @FXML 注释。 @FXML 标签使 FXMLLoader 能够注入在 FXML 中定义的值,但您的 observableList 不需要由 FXMLLoader 设置

    所以

    @FXML private ObservableList<String> cbGameOptions;
    

    应该是

    private ObservableList<String> cbGameOptions;
    

    希望这会有所帮助。

    【讨论】:

    • @FXML 确实在这里没有意义,但为什么它实际上会停止工作呢?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多