JavaFX更新ComboBox

时间:2018-03-30 15:18:28

标签: java javafx

在我的ComboBox中更新内容时,我收到了大量未知来源错误。

以下是我如何将数据分配到组合框

DateBox.setItems(FXCollections.observableArrayList(dateList));
DateBox.getSelectionModel().selectFirst();

然后我用这行添加changelistener

DateBox.valueProperty().addListener((obs, oldVal, newVal) -> listListener(newVal));

现在,当我更新dateList并再次调用第一段代码时,如果我没有设置该侦听器,则可以正常工作。但是,如果我用听众设置它,它会喷出未知来源。我很可能通过在更新之前删除监听器然后将其添加回来绕过这个但我无法找到任何方法。这也不是最正确的做法。

如何更新ComboBox(DateBox)而不会导致弹出所有这些错误。我假设问题是我用setItems更改内容。我猜有一种方法可以让组合框更新,但我找不到它。

1 个答案:

答案 0 :(得分:0)

这是一个可运行的示例,其中一个组合框更新另一个

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.ComboBox;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

import java.util.ArrayList;
import java.util.Arrays;

public class Main extends Application {

    @Override
    public void start(Stage stage) {

        ArrayList<String> list = new ArrayList<>(Arrays.asList("1", "2", "3"));

        ComboBox<String> comboBoxOne = new ComboBox<>();
        ComboBox<String> comboBoxTwo = new ComboBox<>();

        comboBoxOne.getItems().addAll(list);
        comboBoxOne.setOnAction(event -> {
            comboBoxTwo.getItems().clear();
            ArrayList<String> listTwo = new ArrayList<>();
            for (int i = 0; i < 5; i++)
                listTwo.add(comboBoxOne.getValue());
            comboBoxTwo.getItems().addAll(listTwo);
        });

        VBox vBox = new VBox(comboBoxOne, comboBoxTwo);
        Scene scene = new Scene(vBox);
        stage = new Stage();
        stage.setScene(scene);
        stage.show();
    }

    public static void main(String[] args) { launch(args); }
}