更改其值后重新加载comboBox

时间:2019-01-29 11:20:56

标签: javafx combobox

初始化线程时,我正在使用从sql数据库获取的项目填充comboBox。

如果有人感兴趣:

rl

我有一部分代码向sql表添加了一个新值,并且我想在出现这种情况时重新填充comboBox。

如果我这样做:

public void initialize(URL arg0, ResourceBundle arg1)  {
    if(arr != null || arr.length > 0) {
        for(int i = 0; i<arr.length; i++) {
            cmBox.getItems().add(arr[i]);
        }
    }
}

它工作正常,但是除非关闭并重新打开显示comboBox的窗口,否则我看不到新更改。

没有错误或其他任何东西,只是在寻找新颖的方法来重新加载comboBox并使其真正显示更新后的值,而无需手动关闭并重新打开窗口。

1 个答案:

答案 0 :(得分:0)

当您向“ sql表中添加新值”时,您不需要运行刷新按钮comboBox.setItems(...),这将更新组合框,此处为示例

public class Main extends Application {

    private int[] data;
    private int dataCount = 0;

    @Override
    public void start(Stage primaryStage) throws Exception{
        data = randomizeData(dataCount);

        ComboBox comboBox = new ComboBox();
        comboBox.setItems(FXCollections.observableArrayList(
                Arrays.stream(data).boxed().collect(Collectors.toList())));

        Button updateDataButton = new Button("Update values in SQL Table");
        updateDataButton.setOnAction(event -> {
                //Update your SQL data
                updateData();

                //Refresh List
                comboBox.setItems(FXCollections.observableArrayList(
                        Arrays.stream(data).boxed().collect(Collectors.toList())));
        });

        VBox vBox = new VBox();
        vBox.setAlignment(Pos.CENTER);
        vBox.getChildren().addAll(comboBox, updateDataButton);

        Scene scene = new Scene(vBox);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    private int[] randomizeData(int additional){
        int[] data = new int[5+additional];
        for (int i = 0; i < data.length; i++) {
            data[i] = (int) (Math.random()*10);
        }
        return data;
    }

    private void updateData(){
        data = randomizeData(++dataCount);
    }

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