Вызов функции в созданном окне в javaFX - PullRequest
0 голосов
/ 25 мая 2018

У меня есть окно, из которого я могу открыть другое, и я бы хотел вызвать функцию из первого окна, которое влияет на само первое окно.Как я могу это сделать?

Это не работает таким образом

 FXMLLoader loader = new FXMLLoader();
            loader.setLocation(getClass().getClassLoader().getResource("view/MyWindow.fxml"));
    loader.load();

    MyWindowController MyWindow = loader.getController();
    MyWindow.someFunction();

Это работает только, если я вызываю функцию, которая влияет на новое окно, например,

FXMLLoader loader = new FXMLLoader();
        loader.setLocation(getClass().getClassLoader().getResource("view/MyWindow.fxml"));
    loader.load();

    MyWindowController MyWindow = loader.getController();
    MyWindow.someFunction();
    Parent root;
    root = loader.getRoot();
    Stage stage = new Stage();
    stage.setTitle("View employee");
    stage.setScene(new Scene(root));
    stage.show();
    stage.setResizable(false);

Ответы [ 2 ]

0 голосов
/ 25 мая 2018

Хорошо, поэтому я создал ссылку на 1-е окно parentStage

и затем отобразил корень FXML в parentStage

Parent root;
root = loader.getRoot();
parentStage.setScene(new Scene(root));

Кажется, что работает

0 голосов
/ 25 мая 2018

Я полагаю, у вас неправильное понимание того, что делают FXMLLoader, Stages и Scenes.

Само окно является сценой, и его содержимым являются сцены (возможно, несколько), и эти сцены имеют контроллеры.это хорошо контролирует их. Вам придется передать контроллер сцены, который вы хотите изменить, в контроллер сцены, который должен выполнить модификацию в определенный момент времени.

После loader.load(); вы не делаетепока есть окно, и вы не можете получить доступ к существующей Windows таким же образом.У вас есть переменная, которая может быть использована для создания новой сцены в виде Parent root.Вот и все.

В качестве альтернативы , вы можете посмотреть ObservableValues ​​и списки JavaFX , которые могут просто сделать то, что вы хотите достичь.Вместо того, чтобы обойти контроллеры, вы затем создали бы статический (или Singleton) DataSourceController, который предоставляет доступ к ObservableValue, и вы просто используете его в обеих сценах, и он обновит другие.Зависит от того, что метод должен делать с другой сценой.

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