2016-11-18 22 views
0

我無法獲取我的字符串值以打印到我構建的GUI ComboBox中。實質上,每當我將我的cbGame組合框的值分配給JavaFX程序時,當我嘗試啓動GUI時,它會給我一個非法參數異常。完整的代碼在我的GitHub上:https://github.com/jparr721/Blue-Box2 我需要幫助的代碼如下。JavaFX在ComboBox中沒有存儲字符串值

控制器類:

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應用程序。 JavaFX GUI

+0

請發表您的實際問題FXML。發佈一個沒有足夠細節的問題來回答它簡單地鼓勵人們猜測答案。 –

+1

「它給了我一個非法的參數異常」編輯你的問題,幷包含IllegalArgumentException的完整堆棧跟蹤。它告訴我們(和你)究竟是哪一行代碼引起了問題。 – VGR

回答

0

好了先刪除,你已經寫cbGame.setItems(cbGameOptions);

相反,您必須

cbGame.getItems().addAll(cbGameOptions); 
+1

其中任何一個應該可以工作。這不是問題。 –

-1

我不認爲你需要一個@FXML標註爲ObservableList。該@FXML標籤啓用的FXMLLoader注入在FXML定義的值,但是你的observableList並不需要由FXMLLoader

進行設置,以便

@FXML private ObservableList<String> cbGameOptions; 

應該

private ObservableList<String> cbGameOptions; 

希望這有助於。

+0

確實@ @ FXML在這裏沒有意義,但爲什麼它實際上停止了它的工作? –

1

我知道這個問題,我打開你的代碼,看到你沒有使用組合框在FXML所以我的組合框改變它,你正在使用SplitMenuButton。

enter image description here

@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); 
    }