我无法从JavaFX组合框中的数据库加载用户名

时间:2016-05-19 14:10:41

标签: java combobox javafx-8

这是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的代码相同。

1 个答案:

答案 0 :(得分:1)

只要用户选择新值,就会触发ComboBox的操作。最初,ComboBox没有项目,因此无法进行选择,用户无法触发操作,这意味着永远不会调用fillComboBox

我猜你的意图是只有当用户更改其值时才让ComboBox自行刷新。您可能应该移除onAction,然后直接在fillComboBox方法中调用initialize