我想构建一个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);
}
}
}
答案 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>