Javafx 2 javafx阶段创建是如何完成的

Javafx 2 javafx阶段创建是如何完成的,javafx-2,javafx,Javafx 2,Javafx,我只是javafx的初学者。我刚刚在ensemble.jar中看到一些示例,对下面的程序有疑问。这里有两个方法start和init,它们都接受Stage类型的参数init()是从start()调用的。我怀疑阶段装饰(添加组、progressindicator、gridpane)是在start方法中完成的。因此primaryStage.show()将显示装饰的阶段,但如果我在start()中写入primaryStage1.show(),则显示装饰的阶段然后装饰好的舞台也在展示。我想知道怎么做 包裹

我只是javafx的初学者。我刚刚在ensemble.jar中看到一些示例,对下面的程序有疑问。这里有两个方法
start
init
,它们都接受
Stage
类型的参数
init()
是从
start()
调用的。我怀疑阶段装饰(添加组、progressindicator、gridpane)是在start方法中完成的。因此
primaryStage.show()
将显示装饰的阶段,但如果我在
start()中写入
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系统为系统创建初始阶段,并且在不显示它的情况下,将对该阶段对象的引用传递给应用程序的start方法

解释示例程序中发生的情况

这里只涉及一个阶段

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

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

关于创建附加阶段

要创建更多的新阶段,您可以执行以下操作(从Sergey的答案到)

关于对象引用传递

另见: 了解阶段在程序中是如何传递的。

关于应用程序阶段创建

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

解释示例程序中发生的情况

这里只涉及一个阶段

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

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

关于创建附加阶段

要创建更多的新阶段,您可以执行以下操作(从Sergey的答案到)

关于对象引用传递

另见:
了解您的程序中该阶段是如何传递的。

感谢您的解释,您应该获得+100,但不幸的是,我不允许这样做+1。我只是javafx的初学者,您能给我一些链接或书名来学习javafx基础吗参见,遵循,使用,并确保您熟练思考(真的)小项目并为其编写代码。感谢您对+100的解释,但不幸的是,我不被允许这样做+1。我只是javafx的初学者,您能给我一些链接或书名来学习javafx基础吗?请查看,遵循,使用,并确保您熟练-思考(真的)小项目,并为其编写代码。
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();