JavaFX window 设置标题

JavaFX window setTitle

我有一个主要的 class 如下:

public class Window extends Application {


    @Override
    public void start(Stage foablak) throws Exception {
        Parent root = FXMLLoader.load(getClass().getResource("Foablak.fxml"));
        Scene scene = new Scene(root);

        foablak.setScene(scene);
        foablak.setWidth(900);
        foablak.setHeight(700);
        foablak.setResizable(false);
        foablak.setTitle("Window");

        foablak.show();
    }

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

}

如何在不关闭 window 并打开一个新的的情况下更新另一个 .java class 的标题?

是的,你可以。在您的 Application.start() 方法中,保存对您可以在其他地方访问的主要 Stage 的引用,然后调用 Stage.setTitle().

class MyApplication extends Application {

    public static Stage primaryStage;

    @Override
    public void start(Stage primaryStage) {
        MyApplication.primaryStage = primaryStage;

        // ...
    }

}

MyApplication.primaryStage.setTitle("New Title");

顺便说一句,我会避免调用您的 class Window,因为那是其中一个 JavaFX classes 的名称。

使用 static 公开属性,仅仅为了公开, 可能被 视为糟糕的设计。您有不同的方法来实现相同的目标,例如,公开 Window class 中设置舞台标题的方法。

public class Window extends Application {

    private Stage stage;

    @Override
    public void start(Stage foablak) throws Exception {
        stage = foablak;
        Parent root = FXMLLoader.load(getClass().getResource("Foablak.fxml"));
        Scene scene = new Scene(root);

        foablak.setScene(scene);
        foablak.setWidth(900);
        foablak.setHeight(700);
        foablak.setResizable(false);
        foablak.setTitle("Window");

        foablak.show();
    }

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

    public void setStageTitle(String newTitle) {
        stage.setTitle(newTitle);
    }
}

以下可能不是您正在寻找的解决方案,但它可能对某些开发人员有用:

  • 场景:只有1个JavaFX应用;该应用程序需要 运行 多次;您想区分谁在 运行 应用程序
  • 注意:注意Main和
    的运行ning顺序 控制器 class
  • 解决方法:i.在ControllerClass中声明一个private static变量,例如private static String strWho;二.通过提供 getter 方法公开 strWho。例如:public static String getWho(){ return 海峡; };三.为控制器实施初始化方法,并根据您的需要,在每次 运行 JavaFX 应用程序时分配一个不同的值。例如,@FXML public无效初始化(){ strWho = "you need to have logic here, to have a distinct value each time you run the app"; }
  • 在 Main 启动方法中,就在您调用 stage.show 之前,设置标题。例如: primaryStage.setTitle(Controller.getWho())); primaryStage.show();
  • 每次您 运行 应用程序时实现 strWho 不同值的逻辑的一种方法:您可以在控制器的初始化方法中有一个 TextInputDialog,通过询问名称等来接受用户输入.