Как рекурсивно вызвать кнопку на нажатие кнопки? - PullRequest
0 голосов
/ 08 февраля 2019

Как я могу добавить новый Button при нажатии кнопки для бесконечного или динамического числа раз?Или простыми словами, как можно выполнить функцию добавления дополнительных кнопок?

Я пробовал в Javafx, но он добавляет только две кнопки в списке.

@FXML
void addMoreButton(ActionEvent event) {

    b[count]=new Button("+");
    b[count].setOnMouseClicked(event2 -> { 
        count++;
        b[count]=new Button("+");
        list.setAll(b[count]);
        vboxTest.getChildren().addAll(list);
    });

    list.add(b[count]);
    vboxTest.getChildren().addAll(list);

}

, но я должен добавитьдинамически, пока пользователь не хочет добавить / нажать предыдущую кнопку

1 Ответ

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

только последняя добавленная кнопка должна вызывать следующую (означает, что вторая кнопка вызывает третью кнопку, а третий - вперед и так далее) ...

Предполагается, что вы начинаете точно с1 кнопка, использующая метод как onAction обработчик событий, вам нужно сделать 2 вещи, чтобы правильно обновить сцену:

  1. добавить новую кнопку, используя тот же обработчик событий
  2. удалитьОбработчик события из нажатой кнопки

Это можно сделать, обратившись к источнику события:

@FXML
void addMoreButton(ActionEvent event) {
    Button source = (Button) event.getSource();
    source.setOnAction(null); // remove event handler

    Button newButton = new Button("+");
    newButton.setOnAction(this::addMoreButton);

    vboxTest.getChildren().add(newButton);
}

Примечание: Я опустил список /массив специально, так как массив ограничивает количество элементов (ArrayIndexOutOfBoundsException) и должен привести к исключению для содержания null / значения уже в дочернем списке, если только вы не установите размер массива равным 1, что позволяет вамвызов.Конечно, вы можете сохранить эти Button в списке, если это требует другой код.

Не уверен, что удаление обработчика событий является желаемым результатом.Также можно сделать разные вещи, такие как вставка новой кнопки после нажатия одной кнопки:

@FXML
void addMoreButton(ActionEvent event) {
    Node source = (Node) event.getSource();

    Button newButton = new Button("+");
    newButton.setOnAction(this::addMoreButton);

    vboxTest.getChildren().add(vboxTest.getChildren().indexOf(source) + 1, newButton);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...