如何在运行时更新JavaFX标题?

时间:2019-04-27 19:50:06

标签: java javafx

我对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 :(得分:0)

只需在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语句(或对其使用最小的范围)。

答案 1 :(得分:-1)

在您的主类中,您可以像这样存储对 function run1(){ var username = $("#username").val(); var password = $("#password").val(); let xmlRequest,obj; xmlRequest = new XMLHttpRequest(); xmlRequest.onreadystatechange = function(){ if(this.readyState === 4 && this.status === 200){ obj = JSON.parse(this.responseText); var res = obj[username]; if(res == password){ alert(`Welcome ${username}`); } } } xmlRequest.open("GET","http://localhost/deneme/info.json",true); xmlRequest.send(); } function run(){ var username = $("#username").val(); var password = $("#password").val(); let xmlRequest,obj; xmlRequest = new XMLHttpRequest(); var url = "http://localhost/deneme/info.json"; xmlRequest.open("POST", url, true); xmlRequest.onreadystatechange = function(){ if(this.readyState === 4 && this.status === 200){ obj = JSON.parse(this.responseText); } } var data = JSON.stringify({username:password}); xmlRequest.send(data); } 的引用:

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"); } } 对象。 请注意,WindowWindow的超类,因此您需要使用强制转换以Stage的形式访问其属性