Перезагрузка comboBox после изменения его значений - PullRequest
0 голосов
/ 29 января 2019

Я заполняю comboBox элементами, взятыми из базы данных sql при инициализации потока.

Если кому-то интересно:

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]);
        }
    }
}

У меня есть часть моего кода, которая добавляет новыйзначение в таблицу sql, и я хочу заново заполнить comboBox, когда это произойдет.

, если я сделаю:

    cmBox.getItems().clear();
    arr = sqld.selectAll();

    if(arr != null || arr.length > 0) {
        for(int i = 0; i<arr.length; i++) {
            cmBox.getItems().add(arr[i]);
        }
    }

Работает нормально, но я не вижу новыйизменения, если я не закрою и снова не открою окно, в котором отображается comboBox.

Без ошибок или чего-либо еще, просто ищу творческие способы перезагрузки comboBox и действительно показываю обновленные значения без закрытия и повторного запуска вручную.-открытие окна.

1 Ответ

0 голосов
/ 29 января 2019

Вам не нужна кнопка обновления, просто запустите comboBox.setItems(...), когда вы добавите «новое значение в таблицу sql», это должно обновить поле со списком, вот пример

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); }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...