2016-11-02 51 views
0

美好的一天我对编码完全陌生。我正在构建一个除了其他库项目之外还使用组合框的应用程序。我面临的问题是,在尝试从Mysql Db填充组合框项目时,每次单击下拉菜单时项目值都会被复制。来自mysql的JavaFx组合框

我该如何防止这种情况发生?我明白我的方法本身可能是错误的。

@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

也许你可以尝试清除项目,然后再添加更多。但我不确定,如果你确实想要查询每一次点击,这似乎是一个微小的矫枉过正。 –

+0

你如何使用'getStation'方法? '@ FXML'(尽管公共方法没有必要)看起来可能表明你将它用作fxml文件中的事件处理程序。请添加有关此方法如何用于问题的信息。 – fabian

+0

感谢您的回复。@ el_chupacabra您的观察是正确的,我并不想每次点击都要查询,我只希望在用户点击组合框按钮时显示项目,然后在列表中重置或清除项目关闭了。 Fabian是的@FXML使用是一个新手的错误,该方法被称为鼠标点击。 –

回答

0

行,所以我移动的功能,以在控制器的initialize()方法和创建的被叫站

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

} 

一个Observabale列表,然后在原有的功能只留下这一行....似乎在工作。

@FXML 
private void getStation() { 

    comboBoxStation.setItems(stationsList); 
}