【问题标题】:how javafx stage creation is donejavafx阶段创建是如何完成的
【发布时间】:2013-10-11 05:51:35
【问题描述】:

我只是 javafx 的初学者。我只是在 ensemble.jar 中看到一些示例,并对以下程序有疑问。这里有 2 种方法 startinit 两者都接受参数输入Stageinit() 是从 start() 调用的。我怀疑舞台装饰(添加组、进度指示器、网格窗格)是在 start 方法中完成的。所以 primaryStage.show() 将显示装饰的舞台,但如果我在 @987654328 中写 primaryStage1.show() 则在这里@然后还有装饰的舞台也在展示。我想知道如何

包装效果;

/**
 * Copyright (c) 2008, 2012 Oracle and/or its affiliates.
 * All rights reserved. Use is subject to license terms.
 */
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.scene.control.ProgressIndicator;
import javafx.scene.layout.GridPane;

/**
 * A sample that demonstrates the Progress Indicator control in various modes.
 *
 * @see javafx.scene.control.ProgressIndicator
 * @related controls/ProgressBar
 */
public class ProgressIndicatorSample extends Application {

    private void init(Stage primaryStage) {
        Group root = new Group();
        primaryStage.setResizable(false);
        primaryStage.setScene(new Scene(root, 400,400));

        GridPane g = new GridPane();

        ProgressIndicator p1 = new ProgressIndicator();
        p1.setPrefSize(50, 50);

        ProgressIndicator p2 = new ProgressIndicator();
        p2.setPrefSize(50, 50);
        p2.setProgress(0.25F);

        ProgressIndicator p3 = new ProgressIndicator();
        p3.setPrefSize(50, 50);
        p3.setProgress(0.5F);

        ProgressIndicator p4 = new ProgressIndicator();
        p4.setPrefSize(50, 50);
        p4.setProgress(1.0F);

        g.add(p1, 1, 0);
        g.add(p2, 0, 1);
        g.add(p3, 1, 1);
        g.add(p4, 2, 1);
char x[]={'a','m'};
x.toString();
System.out.println(x);
        g.setHgap(40);
        g.setVgap(40);

        root.getChildren().add(g);

    }

    public double getSampleWidth() { return 400; }

    public double getSampleHeight() { return 400; }

    @Override public void start(Stage primaryStage1) throws Exception {
        init(primaryStage1);
        primaryStage1.show();
    }
    public static void main(String[] args) { launch(args); }
}

【问题讨论】:

    标签: javafx-2 javafx


    【解决方案1】:

    在应用阶段创建

    在启动应用程序时,JavaFX 系统为系统创建一个初始阶段,并且不显示它,将对该阶段对象的引用传递给应用程序的启动方法。

    解释你的示例程序中发生了什么

    这里只涉及一个阶段。

    当您启动 JavaFX 应用程序时(就像您在 main 方法中所做的那样),JavaFX 工具包系统就会启动。 JavaFX 系统为您的应用程序创建一个初始阶段(窗口),但不显示它,而是将对该阶段的引用传递给您的启动方法(您接受它作为参数primaryStage1)。然后将该阶段引用传递给 init 方法,该方法将所有内容(组、进度条等)放入它放置在舞台上的场景中。最后,执行返回到您的 start 方法,并且您请求显示舞台(这告诉 JavaFX 系统在屏幕上显示舞台并在舞台内呈现内容)。

    除了由 JavaFX 系统创建并传递到您的程序中的初始阶段之外,您还可以在程序中创建更多新阶段,以便出于弹出对话框或其他原因拥有额外的阶段(窗口),但是你没有。

    关于创建其他阶段

    要创建更多新阶段,您可以执行以下操作(来自 Sergey 对 How to create and show common dialog (Error, Warning, Confirmation) in JavaFX 2.0? 的回答)

    Stage dialogStage = new Stage();
    dialogStage.initModality(Modality.WINDOW_MODAL);
    dialogStage.setScene(new Scene(VBoxBuilder.create().
        children(new Text("Hi"), new Button("Ok.")).
        alignment(Pos.CENTER).padding(new Insets(5)).build()));
    dialogStage.show();
    

    关于对象引用传递

    另请参阅: Is Java "pass-by-reference" or "pass-by-value"? 了解阶段是如何在您的程序中传递的。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-22
    • 1970-01-01
    • 2012-10-11
    • 2018-09-25
    • 1970-01-01
    • 2019-11-30
    • 1970-01-01
    相关资源
    最近更新 更多