2016-11-02 12 views
0

Guten Tag, ich bin völlig neu in der Codierung. Ich baue eine App, die neben anderen Bibliothekselementen eine Combobox verwendet. Das Problem, dem ich gegenüberstehe, ist, dass beim Versuch, Combobox-Elemente aus einem Mysql-Db zu füllen, die Elementwerte jedes Mal dupliziert werden, wenn auf das Dropdown-Menü geklickt wird.JavaFx Combobox von Mysql

Wie kann ich das verhindern? Ich verstehe, dass mein Ansatz selbst falsch sein könnte.

@FXML 
public void getStation() { 
    String sqlStationName = " select * from station "; 

    try { 
     conn = (Connection) DBConnection.connect(); 
     PreparedStatement pstStn = conn.prepareStatement(sqlStationName); 
     ResultSet stnRS = pstStn.executeQuery(sqlStationName); 

     while (stnRS.next()) { 

     comboBoxStation.getItems().add(stnRS.getString("stationName")); 


     } 

     stnRS.close(); 
     pstStn.close(); 
     conn.close(); 

    } catch (SQLException ex) { 
     System.err.println("ERR" + ex); 
    } 

} 
+0

vielleicht könnten Sie versuchen, die Elemente zu löschen, bevor Sie mehr hinzufügen. Ich bin mir aber nicht sicher, ob du wirklich bei jedem Klick abfragen willst, es scheint ein leichter Overkill imo zu sein. –

+0

Wie verwenden Sie die 'getStation' Methode? '@ FXML' (obwohl dies für öffentliche Methoden unnötig ist) könnte darauf hindeuten, dass Sie es als Event-Handler aus der fxml-Datei verwenden. Fügen Sie Informationen hinzu, wie diese Methode für die Frage verwendet wird. – fabian

+0

Vielen Dank für Ihre Antworten @ el_chupacabra Ihre Beobachtung ist richtig, ich möchte nicht wirklich bei jedem Klick abfragen, ich möchte nur, dass die Elemente angezeigt werden, wenn der Benutzer auf die Combobox-Schaltfläche klickt und dann zurückgesetzt oder gelöscht wird, wenn die Liste ist geschlossen. Fabian ja die @ FXML Verwendung ist ein Anfängerfehler, die Methode wird per Mausklick aufgerufen. –

Antwort

0

Ok so bewegte ich die Funktion zum Initialize() Methode in der Steuerung und erstellt eine Liste Observabale gerufenen Station

 private ObservableList<String> stationsList = FXCollections.observableArrayList(); 

    @Override 
public void initialize(URL url, ResourceBundle rb) { 
    // 
    String sqlStationName = " select * from station "; 

    try { 
     conn = (Connection) DBConnection.connect(); 
     PreparedStatement pstStn = conn.prepareStatement(sqlStationName); 
     ResultSet stnRS = pstStn.executeQuery(sqlStationName); 

     while (stnRS.next()) { 

      stationsList.add(stnRS.getString("stationName")); 

     } 

     stnRS.close(); 
     pstStn.close(); 
     conn.close(); 

    } catch (SQLException ex) { 
     System.err.println("ERR" + ex); 
    } 

} 

und dann nach links nur diese Zeile in der ursprünglichen Funktion .... scheint zu arbeiten.

@FXML 
private void getStation() { 

    comboBoxStation.setItems(stationsList); 
} 
Verwandte Themen