Кнопка JavaFX, которая добавляет и удаляет флажки - PullRequest
0 голосов
/ 20 января 2020

Я пытался создать кнопку, которая удаляет отмеченный флажок, но не знаю, как сделать «cb» таким же, как в кнопке «Добавление».

package sample;


import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.CheckBox;
import javafx.scene.control.TextField;
import javafx.scene.layout.VBox;




public class Controller {

    @FXML
    private Button add;
    @FXML
    private Button delete;
    @FXML
    private VBox vbox;
    @FXML
    private TextField text;
    @FXML
    private CheckBox cb;



    @FXML
    void initialize() {

    }

    @FXML
    public void onAdd(ActionEvent e) {
        CheckBox cb = new CheckBox(text.getText());
        vbox.getChildren().add(cb);
        if (text.getText().matches("")) {
            vbox.getChildren().remove(cb);
        }

    }
    @FXML
    public void onDelete(ActionEvent e) {

        if(cb.isSelected()){
                vbox.getChildren().remove(cb);
            }
        }

    }

«cb» в событии onAdd isn не так, как в событии onDelete. Как я могу решить это?

1 Ответ

0 голосов
/ 20 января 2020

Обратите внимание, что можно добавить несколько CheckBox с кодом, который вы опубликовали. Неясно, какой из них должен быть удален. Конечно, вы можете получить доступ к дочерним элементам так же, как и к любым другим элементам списка. Вы, конечно, хотите добавить актерский состав, поскольку children - это List<Node>. Если все дочерние элементы vbox являются CheckBox es, вы можете просто выполнить итерацию по всем дочерним элементам и удалить все те CheckBox es, которые выбраны (при условии, что это та функция, которую вы пытаетесь достичь).

vbox.getChildren().removeIf(child -> ((CheckBox) child).isSelected());

Если это не так, вы можете сохранить элементы в поле List<CheckBox>:

private final List<CheckBox> checkBoxes = new ArrayList<>();

@FXML
public void onAdd(ActionEvent e) {
    if (text.getText().isEmpty()) { // alternative: text.getText().equals(""); matches is for regular expressions
        CheckBox cb = new CheckBox(text.getText());
        vbox.getChildren().add(cb);
        checkBoxes.add(cb);
    }
}

@FXML
public void onDelete(ActionEvent e) {

    Iterator<CheckBox> iter = checkBoxes.iterator();
    while (iter.hasNext()) {
        CheckBox cb = iter.next();
        if (cb.isSelected()) {
            // remove from both vbox and checkBoxes
            vbox.getChildren().remove(cb);
            iter.remove();
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...