JavaFX窗口setTitle

时间:2015-03-15 00:10:36

标签: javafx window title

我有一个主要类如下:

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);
    }

}

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

3 个答案:

答案 0 :(得分:4)

使用static公开属性,仅仅为了公开,可能被认为是一个糟糕的设计。您可以通过不同的方式实现相同的功能,例如,从Window类中公开设置舞台标题的方法。

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 :(得分:1)

是的,你可以。在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");

顺便说一句,我会避免调用你的类Window,因为这是JavaFX类之一的名称。

答案 2 :(得分:1)

以下可能不是您想要的解决方案,但对某些开发人员可能有用:

  • 场景:只有1个JavaFX应用程序;该应用程序需要运行 多次;您想区分谁在运行应用程序
  • 注意:注意Main和
    的运行顺序 控制器类
  • 解决方案:i。在Controller类中,声明一个私有静态变量,例如private static String strWho;。 ii。通过提供一种吸气方法来公开谁。例如:public static String getWho(){ 返回strWho; }; iii。实现Controller的initialize方法,并根据需要在每次运行JavaFX应用程序时分配一个不同的值。例如,@ FXML 公共无效initialize(){ strWho =“您需要在这里有逻辑,以便每次运行应用程序时都有不同的价值”; }
  • 在Main start方法中,在调用stage.show之前,设置标题。例如: primaryStage.setTitle(Controller.getWho())); primaryStage.show();
  • 实现每次运行该应用程序的strWho的不同值的逻辑的一种方法:您可以在Controller的initialize方法中使用TextInputDialog,以通过输入名称等方式接受用户输入。