1

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

包外汇;

/**
 * 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); }
}
4

1 回答 1

4

在应用阶段创建

在启动应用程序时,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();

关于对象引用传递

另请参阅: Java 是“按引用传递”还是“按值传递”?了解阶段是如何在您的程序中传递的。

于 2013-10-11T06:38:22.513 回答