2016-11-18 15 views
0

Ich kann meine Zeichenfolgenwerte nicht zum Drucken in die von mir erstellte GUI-ComboBox abrufen. Jedes Mal, wenn ich den Wert meiner ComboBox cbGame dem JavaFX-Programm zuweise, gibt es mir eine unzulässige Argumentausnahme, wenn ich versuche, die GUI zu starten. Der vollständige Code ist auf meinem GitHub: https://github.com/jparr721/Blue-Box2 der Code, den ich brauche, ist wie folgt.JavaFX speichert keine Zeichenfolgenwerte in der ComboBox

Controller-Klasse:

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

Hier ist die JavaFX-Anwendung, wo ich cbGame zum ComboBox zuweisen. JavaFX GUI

+0

Bitte senden Sie das FXML in Ihrer aktuellen Frage. Wenn Sie eine Frage mit ungenügendem Detail zur Beantwortung dieser Frage eingeben, werden die Leute ermutigt, die Antwort zu erraten. –

+1

"Es gibt mir eine illegale Argument Ausnahme" Bearbeiten Sie Ihre Frage und schließen Sie die vollständige Stack-Trace dieser IllegalArgumentException. Es sagt uns (und Ihnen) genau, welche Codezeile das Problem verursacht hat. – VGR

Antwort

0

Okay, zunächst entfernen, wo Sie cbGame.setItems(cbGameOptions);

Sie stattdessen

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

Entweder einer von denen sollte funktionieren. Das ist nicht das Problem. –

-1

Ich glaube nicht, dass Sie für eine ObservableList eine @FXML Anmerkung benötigen, müssen geschrieben haben. Der @FXML-Tag ermöglicht ein FXMLLoader Wert in einem FXML definiert zu injizieren, aber Ihr observableList muss nicht von den FXMLLoader

So

@FXML private ObservableList<String> cbGameOptions; 

sollte

private ObservableList<String> cbGameOptions; 

this helps seine gesetzt werden .

+0

Es ist wahr, dass '@ FXML' hier keinen Sinn ergibt, aber warum sollte es eigentlich aufhören zu funktionieren? –

1

Ich kenne das Problem, ich öffne Ihren Code und sah, dass Sie nicht ComboBox in Ihrem fxml verwenden, also ändere ich es mit Kombinationsfeld, verwenden Sie 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); 
    }