这是UserController.java类。
public ObservableList<UserModelItem> options = FXCollections.observableArrayList();
@FXML
private ComboBox<UserModelItem> combo;
This is the UserModelItem.java.class
public static class UserModelItem{
private final SimpleStringProperty username;
public UserModelItem(String user){
super();
this.username = new SimpleStringProperty(user);
}
public String getUsername() {
return username.get();
}
public void setUsername(String uname){
username2.set(uname);
}
}
这是UserController.java.class中的initialize方法
public void initialize(URL location, ResourceBundle resources) {
combo.setItems(options);
}
这是对ComboBox的FXML引用 -
<ComboBox fx:id="combo" layoutX="131.0" layoutY="377.0" onAction="#fillComboBox" prefWidth="150.0" />
这个fillComboBox()函数通过SceneBuilder和UserController类分配给带有fx:id组合的ComboBox。
public void fillComboBox(ActionEvent event){
try{
Connection connect = SqLiteConnection.Connector();
String query = "select username from employee";
PreparedStatement ps = connect.prepareStatement(query);
ResultSet rs = ps.executeQuery();
while(rs.next()){
options.add(new UserModelItem(rs.getString("username")));
}
ps.close();
rs.close();
}catch(Exception e){
e.printStackTrace();
}
}
这是将ObservableList转换为String -
的函数 combo.setConverter(new StringConverter<UserModelItem>() {
@Override
public String toString(UserModelItem object) {
return object.getUsername();
}
@Override
public UserModelItem fromString(String string) {
// TODO Auto-generated method stub
return null;
}
});
}
我已经检查了stackoverflow上的大部分答案,我的代码与那些仍然无法填充ComboBox的代码相同。
答案 0 :(得分:1)
只要用户选择新值,就会触发ComboBox的操作。最初,ComboBox没有项目,因此无法进行选择,用户无法触发操作,这意味着永远不会调用fillComboBox
。
我猜你的意图是只有当用户更改其值时才让ComboBox自行刷新。您可能应该移除onAction
,然后直接在fillComboBox
方法中调用initialize
。