2016-05-19 7 views
0

Dies ist die Klasse UserController.java.Ich bin nicht in der Lage, Benutzername aus der Datenbank in JavaFX Combobox laden

public ObservableList<UserModelItem> options = FXCollections.observableArrayList(); 
@FXML 
private ComboBox<UserModelItem> combo; 
This is the UserModelItem.java.class 

public static class UserModelItem{ 
     private final SimpleStringProperty username; 
     public UserModelItem(String user){ 
      super(); 
      this.username = new SimpleStringProperty(user); 
     } 
     public String getUsername() { 
      return username.get(); 
     } 
     public void setUsername(String uname){ 
      username2.set(uname); 
     } 
    } 

Dies ist die Methode Initialize in UserController.java.class

public void initialize(URL location, ResourceBundle resources) { 
combo.setItems(options); 
} 

Dies dies der FXML Bezug auf die ComboBox-

<ComboBox fx:id="combo" layoutX="131.0" layoutY="377.0" onAction="#fillComboBox" prefWidth="150.0" /> 

Diese fillComboBox() -Funktion ComboBox zugeordnet ist mit fx: id combo über SceneBuilder zusammen mit der UserController-Klasse.

public void fillComboBox(ActionEvent event){ 
      try{ 
       Connection connect = SqLiteConnection.Connector(); 
       String query = "select username from employee"; 
       PreparedStatement ps = connect.prepareStatement(query); 
       ResultSet rs = ps.executeQuery(); 
      while(rs.next()){ 
       options.add(new UserModelItem(rs.getString("username"))); 
      } 
      ps.close(); 
      rs.close(); 
     }catch(Exception e){ 
      e.printStackTrace(); 
     } 
    } 

Dies ist die Funktion ObservableList zu konvertieren String-

combo.setConverter(new StringConverter<UserModelItem>() { 

      @Override 
      public String toString(UserModelItem object) { 
       return object.getUsername(); 
      } 

      @Override 
      public UserModelItem fromString(String string) { 
       // TODO Auto-generated method stub 
       return null; 
      } 
     }); 
} 

ich die meisten Antworten auf Stackoverflow und mein Code ist identisch geprüft haben, die noch nicht in der Lage, die ComboBox aufzufüllen ich bin.

+0

Bitte bearbeiten Sie Ihre Frage und fügen Sie das Element Ihrer FXML-Datei ein, das sich auf 'fillComboBox' bezieht. – VGR

+0

@VGR Ich habe die FXML-Referenz zur Combobox hinzugefügt. Bitte überprüfen Sie –

Antwort

1

Die Aktion einer ComboBox wird immer dann ausgelöst, wenn der Benutzer einen neuen Wert auswählt. Zu Beginn hat die ComboBox keine Elemente, daher ist eine Auswahl nicht möglich und der Benutzer kann keine Aktion auslösen, was bedeutet, dass fillComboBox nie aufgerufen wird.

Ich vermute, es war nicht Ihre Absicht, die ComboBox nur aktualisieren, wenn der Benutzer seinen Wert ändert. Sie sollten wahrscheinlich die onAction entfernen und rufen Sie einfach fillComboBox direkt von innerhalb Ihrer initialize Methode.

+0

Sorry für die späte Antwort, aber Ihr Vorschlag hat funktioniert. Ich habe gerade das onAction-Ereignis entfernt, das mit combobox verbunden ist, und die fillComboBox() -Funktion in initialize-Methode aufgerufen und voila ....... es hat funktioniert ... eine Milliarde dank dir. habe deine antwort angenommen .... –