2016-09-16 82 views
0

我有一個組合框,我想從數據庫中填充數據。使用下面的代碼,ComboBox中顯示的數據是值的ID,而不是string值。JavaFX:使用來自MySQL數據庫的數據填充組合框,打破組合框的StringConverter

(部分)的Java控制器代碼:

@FXML 
    ComboBox studentPicker; 
@Override 
    public void initialize(URL url, ResourceBundle rb) { 
     String dbUsername = "root"; 
     String dbPassword = "x"; 
     String dbURL = "jdbc:mysql://localhost:3306/uia"; 
     try { 
      Connection conn = DriverManager.getConnection(dbURL, dbUsername, dbPassword); 
      data = FXCollections.observableArrayList(); 
      // Execute query and store result in a resultset 
      ResultSet rs = conn.createStatement().executeQuery("SELECT username FROM user WHERE userrole='STUDENT';"); 
      while (rs.next()) { 
       //get string from db,whichever way 
       data.add(new User(rs.getString("username"))); 
      } 

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

     studentPicker.setItems(null); 
     studentPicker.setItems(data); 
    } 

StringConverter我試圖從How to import database data into combo box in javafx回升,但是這導致錯誤與組合框。請參閱下面的圖片:左圖是應該是如何的,右圖是將StringConverter添加到代碼時的樣子。

How it is supposed to be How it is when adding the StringConverter below to the code

studentPicker.setConverter(new StringConverter<User>() { 

     @Override 
     public String toString(User object) { 
      return object.getName(); 
     } 

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

我想顯示從數據庫中收集的用戶名,但ID的像「[email protected]」顯示代替。 任何建議,以我如何能解決這個問題,不勝感激。

+1

它看起來像你正在添加一個新的用戶(「名稱」)到'數據'數組。這就是爲什麼你得到'「[email protected]」'。如果你的User類有一個'getName()'或'getUsername()'方法,那就調用它。所以像'data.add(新用戶(rs.getString(「username」))。getUserName());' –

回答

1

回答我的意見。

要添加new User("username")data陣列這就是爲什麼你得到一個奇怪的字符串,特別User它的ID。

嘗試改爲做data.add(new User(rs.getString("username")).getUserName());,如果User類有getUserName()方法。

雖然這可能會破壞你想要做的所有事情,因爲我假設你只是在這裏使用data以上。在另一個變量中存儲comboBox字符串可能是最好的。所以像

//Init same place data is 
comboString = FXCollections.observableArrayList(); //Declared somewhere else 
data.add(new User(rs.getString("username"))); 
comboString.add(rs.getString("username")); 
+0

謝謝!完美工作。 –