从数据库填充组合框

时间:2018-08-29 20:26:10

标签: javafx

我想构建一个ComboBox,该数据库中填充了数据库中的数据,但是它不起作用。SceneBuilder很好,我制作了fxid:comboBoxx和onAction:fillComboBox2并使其运行,但是我没有任何数据,只是空白。我不知道问题出在哪里,我尝试了我所知道的一切。

public class FXMLController implements Initializable {

    @FXML       
    private ComboBox comboBoxx;

    final ObservableList options = FXCollections.observableArrayList();



  public void initialize(URL url, ResourceBundle rb) {

  }

  public void fillComboBox2() {
    String connectionUrl = "jdbc:sqlserver://localhost:1433;" + "databaseName=TestDB;integratedSecurity=true;";
    try {
        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
        Connection con = DriverManager.getConnection(connectionUrl);
        String query = "select artikulli from product_table";
        PreparedStatement statement = con.prepareStatement(query);
        ResultSet set = statement.executeQuery();
        while(set.next()){
            options.add(set.getString("artikulli"));
        }
        statement .close();
        set.close();

    } catch(ClassNotFoundException | SQLException ex) {
         Logger.getLogger(JavaFXExample.class.getName()).log(Level.SEVERE, null, ex);
    }
  }
}

1 个答案:

答案 0 :(得分:1)

这里有两件事要解决。首先,您永远不会真正告诉ComboBox在哪里可以找到要显示的数据。

这是使用comboBoxx.setItems()方法完成的。在控制器的initialize()方法中很容易做到这一点。

此外,您还声明了将onAction的{​​{1}}属性设置为ComboBox方法。这是不正确的。这样做将导致每次您单击fillComboBox2()的下拉菜单时都会调用fillComboBox2()方法。

相反,加载场景时应填充ComboBox。因此,请从您的ComboBox文档中删除onAction定义。

最后,最好完全更改该方法。在下面的更新代码中,您将看到我已将其更改为返回FXML的{​​{1}}方法。我们可以使用该private来填充List<String>

现在,在加载场景时,将调用List方法,并使用ComboBox方法中的comboBoxx.setItems()进行填充。

下面的代码也有一些注释,以帮助解释流程。

  

代码

List<String>