我有一個組合框,我想從數據庫中填充數據。使用下面的代碼,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添加到代碼時的樣子。
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]」顯示代替。 任何建議,以我如何能解決這個問題,不勝感激。
它看起來像你正在添加一個新的用戶(「名稱」)到'數據'數組。這就是爲什麼你得到'「[email protected]」'。如果你的User類有一個'getName()'或'getUsername()'方法,那就調用它。所以像'data.add(新用戶(rs.getString(「username」))。getUserName());' –