Как обновить заголовок JavaFX во время выполнения? - PullRequest
1 голос
/ 27 апреля 2019

Я довольно новичок в JavaFX, и в настоящее время у меня есть следующий код:

public class Main extends Application {
    public void start(Stage primaryStage) {
        try {
            BorderPane root = new BorderPane();
            Scene scene = new Scene(root, 400, 400);
            scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
            primaryStage.setScene(scene);
            primaryStage.show();
        } catch(Exception e) {
            e.printStackTrace();
        }
    }
    public static void main (String[] args) {
        launch(args);
        stage.setTitle("Hello world!");
    }
}

В функции main я пытаюсь изменить заголовок сцены.К сожалению, область действия переменной не позволит мне сделать это.Мне любопытно, как я могу изменить заголовок моего окна JavaFX во время выполнения, поскольку primaryStage - это просто локальный параметр.

Одна вещь, которую я пробовал, это сделать глобальный Stage и установить primaryStage равно, но это не сработало (вроде как).После нескольких поисков в Интернете я думаю, что мне нужно будет создавать новую сцену каждый раз, когда я это делаю, но я бы хотел этого избежать, если это возможно.

Ответы [ 2 ]

0 голосов
/ 28 апреля 2019

Просто установите заголовок внутри start:

public class Main extends Application {

    @Override
    public void start(Stage primaryStage) {
        BorderPane root = new BorderPane();
        Scene scene = new Scene(root, 400, 400);
        scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
        primaryStage.setTitle("Hello world!");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

Если вы хотите изменить его динамически, сохраните его как поле или используйте Node#getScene() и Scene#getWindow().

Примечания:

  • Используйте @Override, если применимо, это может помочь только.
  • Не используйте try-catch операторы там, где они не нужны (и не используйте для них минимальные возможности).
0 голосов
/ 27 апреля 2019

В вашем основном классе вы можете хранить ссылку на Scene следующим образом:

public class Main extends Application {
    private static Scene mainScene;

    public void start(Stage primaryStage) {
        try {
            BorderPane root = new BorderPane();
            Scene scene = new Scene(root, 400, 400);
            scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
            primaryStage.setScene(scene);
            primaryStage.show();
            mainScene = scene;
        } catch(Exception e) {
            e.printStackTrace();
        }
    }
    public static void main (String[] args) {
        launch(args);
        Stage mainStage = (Stage) mainScene.getWindow(); 
        mainStage.setTitle("Hello world");
    }
}

И получить доступ к объекту Window, который он содержит. Обратите внимание, что Window - это суперкласс Stage, поэтому вам нужно использовать приведение для доступа к его свойствам как Stage

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