所有值都不显示在ComboBox中

时间:2014-04-16 16:23:35

标签: mysql combobox javafx javafx-2

   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中显示所有值,也就是说当新值出现时,我需要将其添加为新条目,而不是重叠之前的值。

我该怎么办?

1 个答案:

答案 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);
//...