try {
Class.forName("com.mysql.jdbc.Driver");
connect = DriverManager
.getConnection("jdbc:mysql://localhost:3306/project?"
+ "user=root&password=virus");
statement = connect.createStatement();
preparedStatement = connect
.prepareStatement("select subname from subject");
rs=preparedStatement.executeQuery();
while (rs.next()) {
subject = rs.getString("subname");
ObservableList<String> options1 = FXCollections.observableArrayList(subject);
comboBox1 = new ComboBox(options1);
}
} catch (ClassNotFoundException | SQLException e) {
throw e;
} finally {
close2();
}
comboBox1.setPromptText("Select Subject");
comboBox1.setPrefSize(280, 30);
这是我从表中读取多个值并将其显示在ComboBox中的代码。实际上有3个值要显示。 while循环工作正常。每次从表中读取每个值并将其放在ComboBox中。
但是当下一个值到来时,它会重叠前一个值,因此在ComboBox中只显示一个值,即最后一个读取值。但是我需要在ComboBox中显示所有值,也就是说当新值出现时,我需要将其添加为新条目,而不是重叠之前的值。
我该怎么办?
答案 0 :(得分:1)
value
- 属性适用于当前选定的项目。您必须将结果添加到items
- ObservableList:
List items = comboBox1.getItems(); // java.util.List by the way
items.add("item1"); // use the values from result set here instead
items.add("item2");
//...
如果要显示提示文字,请使用:
comboBox1.setPromptText("your prompt text");
当然,您不会为ResultSet
中的每一行创建一个ComboBox,但会为所有行创建一个:
//...
rs = preparedStatement.executeQuery();
ArrayList<String> subnames = new ArrayList<>();
// add all "subname" values to a List
while (rs.next()) {
subnames.add(rs.getString("subname"));
}
// create a ObservableList from the subnames List
ObservableList<String> options1 = FXCollections.observableArrayList(subnames);
comboBox1 = new ComboBox(options1);
//...