JavaFX: Взаимодействие двух окон

227
10 февраля 2018, 23:55

Есть два окна, допустим при нажатии кнопки в окне1 вызывается окно2 и в контроллер окна2 должен передаться объект1 из окна1 После неких операций, и нажатии кнопки в окне2 нужно вернуть true или false

Каким образом это можно(лучше) реализовать?

Пример: Пользователь нажимает кнопку, выходит окно1, где после неких операций он нажимает "ок" и в зависимости от результата (true или false) идут дальнейшие действия в окне1

Answer 1

Вам необходимо определить соответствующие поле во втором контроллере, для передачи ему объекта.

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ButtonType;
import javafx.scene.control.Dialog;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import javafx.util.Callback;
import java.util.Optional;
public class App extends Application {
    @Override
    public void start(Stage primaryStage) throws Exception {
        RootController root = new RootController(); // or fxml load
        primaryStage.setScene(new Scene(root, 100, 100));
        primaryStage.show();
    }
    private static class RootController extends StackPane {
        private CustomObject customObject = new CustomObject();
        // or fxml initialization
        public RootController() {
            Button bShowDialog = new Button("Show");
            bShowDialog.setOnAction(this::show);
            getChildren().add(bShowDialog);
        }
        private void show(ActionEvent event) {
            DialogController content = new DialogController(); // or fxml load
            content.customObject = customObject;
            Dialog<Boolean> dialog = new Dialog<>();
            dialog.getDialogPane().setContent(content);
            dialog.setResultConverter(content.resultConverter);
            dialog.getDialogPane().getButtonTypes().addAll(ButtonType.OK, ButtonType.CANCEL);
            Optional<Boolean> result = dialog.showAndWait();
            if ( result.isPresent() ) {
                System.out.println("Result = " + result.get());
                System.out.println("New value = " + customObject.i);
            }
        }
    }
    private static class DialogController extends VBox {
        CustomObject customObject;
        // or fxml initialization
        public DialogController() {
            Button bInc = new Button("Inc");
            bInc.setOnAction(this::inc);
            Button bDec = new Button("Dec");
            bDec.setOnAction(this::dec);
            getChildren().addAll(bInc, bDec);
        }
        private void inc(ActionEvent event) { customObject.i++; }
        private void dec(ActionEvent event) { customObject.i--; }
        Callback<ButtonType, Boolean> resultConverter = param -> param == ButtonType.OK && customObject.i > 0;
    }
    private static class CustomObject {
        int i;
    }
}
READ ALSO
Нужен пример java Child key derivation (CKD) functions

Нужен пример java Child key derivation (CKD) functions

Подскажите пожалуйста пример вычисления на java Child key derivation (CKD) functions для биткоинаОписание алгоритма здесь https://github

183
Способ отображения страницы Spring MVC

Способ отображения страницы Spring MVC

Добрый деньЗанялся изучением Spring MVC и задался соответствующим вопросом: какая технология в нынешнее время наиболее востребована и наиболее...

147
Если несколько инпутов не заполнены

Если несколько инпутов не заполнены

Доброго времени суток :) Есть блок, в нём с самого начала два инпутаЕсть кнопка, которая добавляет в блок ещё инпут, т

232
Сообщение через сайт на WhatsApp

Сообщение через сайт на WhatsApp

Нужна такая фича как отправить себе на WhatsAppДопустим человек просматривает страницу товара на моем сайте и ему понравилась какая-то вещь,...

207