JavaFx Получить текст из выбранного CheckBox - PullRequest
1 голос
/ 22 января 2020

Я пытался получить текст из выбранного CheckBox, нажав кнопку. Мои чекбоксы создаются как дочерние элементы vbox, и я не могу понять, как сделать оператор if в функции onRandom, которая собирает текст выбранных чеков.

package sample;


import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.CheckBox;
import javafx.scene.control.ListView;
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 Button random;
    @FXML
    private ListView listview1;
    @FXML
    private ListView listview2;



    @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) {
        vbox.getChildren().removeIf(child -> ((CheckBox) child).isSelected());
    }

    @FXML
    public void onRandom(ActionEvent e) {


    }
}

1 Ответ

1 голос
/ 22 января 2020

Ваш модифицированный метод onRandom() должен выглядеть следующим образом:

@FXML
public void onRandom(ActionEvent e) {
    vbox.getChildren()
        .stream()
        .map(item -> (CheckBox) item)
        .filter(item -> item.isSelected())
        .map(item -> item.getText())
        .filter(text -> Objects.nonNull(text))
        .forEach(System.out::println);
}

Если вам нужно проделать какую-то дополнительную работу, кроме простой распечатки,

//replace it with .forEach(System.out::println);
.forEach(text -> {
   // TODO: logics
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...