Как обновить ChoiceBox в JavaFX? - PullRequest
0 голосов
/ 07 февраля 2019

Я хотел бы обновить поле выбора после добавления нового значения, оно должно быть там показано.

Я прочитал все темы по этому поводу, которые я нашел в stackoverflow, но ни одна из них не сработала.

public void setNamesChoiceBoxes() {
    ArrayList<Worker> workers = new ArrayList<>();
    ArrayList<String> names = new ArrayList<>();

    workers = db.getWorkers();

    for (Worker i : workers) {
        String tmp = i.getName() + " (" + i.getID() + ")";
        names.add(tmp);
    }

    ArrayList<String> searchNames = new ArrayList<>(names);
    searchNames.add(0, "All");
    ObservableList<String> search = FXCollections.observableList(searchNames);
    searchNameChoiceBox.setItems(search);
    searchNameChoiceBox.setValue(search.get(0));


    ArrayList<String> addNames = new ArrayList<>(names);
    addNames.add(0, "");
    ObservableList<String> add = FXCollections.observableList(addNames);
    addNameChoiceBox.setItems(add);
    addNameChoiceBox.setValue(add.get(0));
}

@Override
public ArrayList<Worker> getWorkers() {
    ArrayList<Worker> workers = new ArrayList<>();
    String sql = "select * from names";

    try {
        ResultSet rs = statement.executeQuery(sql);
        while (rs.next()) {
            int id = rs.getInt("id");
            String name = rs.getString("name");
            workers.add(new Worker(id, name));
        }
    } catch (Exception ex) {
        System.out.println("Exception in class \"DB\" (\" public ArrayList<Worker> getWorkers()\" failed): " + ex);
    }
    return workers;
}

@FXML
public void addNewWorkerButton(ActionEvent event) {
    String name = workerNameTextField.getText();
    workerNameTextField.setText("");
    db.addWorker(name);
    addWorkerAnchorPane.setVisible(false);
    mainAnchorPane.setOpacity(1);
    mainAnchorPane.setDisable(false);

    setNamesChoiceBoxes();
}

Я получаю имена рабочих из базы данных, когда запускаю программу, она отлично работает.Когда я добавляю новое имя в БД и вызываю метод «setNamesChoiceBoxes» (чтобы обновить поле выбора из БД), он выдает много ошибок, хотя новое имя находится в списке «Поле выбора», но значение «searchNameChoiceBox» должнобыть "Все", но это "".

После того, как я добавил новое поле выбора имени, выглядит так: https://imgur.com/a/N4JarK7

Это должно быть так ... (так как я установилзначение «Все» в методе ...): https://imgur.com/a/ZAEB7A3

1 Ответ

0 голосов
/ 07 февраля 2019

Мне кажется, я понял, что вы хотите, чтобы определенный элемент был выбран и отображен в вашем ChoiceBox?

Если это так, я бы порекомендовал убрать эту строку (и аналогичную для другой коробки):

 //addNameChoiceBox.setValue(add.get(0));

и использовать вместо этого реальный выбор для отображаемого элемента.При этом выбирается первый элемент:

addNameChoiceBox.getSelectionModel().select(0);

Альтернативно существует отдельный метод, который также выбирает первый элемент:

addNameChoiceBox.getSelectionModel().selectFirst();

И затем снова вы можете выбрать элемент, показанный по значению:

addNameChoiceBox.getSelectionModel().select("All"); //or whatever value you want to select.

Надеюсь, это поможет вам хотя бы частично решить вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...