【发布时间】:2017-01-25 04:13:02
【问题描述】:
我有一个 ComboBox,我想用数据库中的数据填充它。使用以下代码,ComboBox 中显示的数据是值的 ID,而不是 string 值。
(部分)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 提取的,但这导致ComboBox 出错。见下图:左图是应该的样子,右图是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;
}
});
我想显示的是从数据库中收集的用户名,但会显示诸如“is20x.User@4b6ca8f7”之类的 ID。 非常感谢任何有关如何解决此问题的建议。
【问题讨论】:
-
看起来您正在将
new User("name")添加到data数组。这就是您收到"is20x.User@4b6ca8f7"的原因。如果您的User类有getName()或getUsername()方法,请改为调用它。所以像data.add(new User(rs.getString("username")).getUserName());