2013-10-11 60 views
1

我只是javafx.I中的初学者,只是在ensemble.jar中看到了一些示例,并且在以下程序中有疑问。在这里有两种方法startinit两者都接受参数类型为Stageinit()start()被调用。我怀疑舞台装饰(添加组,进度指示器,栅格)在启动方法中完成。因此primaryStage.show()将显示装饰舞台,但如果我在start()中编写primaryStage1.show(),那么装饰舞台也会显示。想知道如何如何完成javafx阶段创建

package fx;

/** 
* 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

在应用阶段创建

在启动应用程序时,JavaFX的系统的系统创建的初始阶段,并在不显示它,传递一个参考这个阶段对象到应用程序的启动方法。

解释在示例程序

只有一种这里所涉及的阶段会发生什么。

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

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

在创建额外的阶段

要创造更多的新的阶段,你可以做类似如下(从谢尔盖的回答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"?了解阶段如何过去d在你的程序中。

+0

感谢您的解释值得+100,但不幸的是我不允许+1。 – SpringLearner

+0

我只是javafx的初学者,能否给我一些链接或书籍名称来学习javafx基础知识 – SpringLearner

+0

请参阅[javafx-2 StackOverflow标签wiki](http://stackoverflow.com/tags/javafx-2/info) ,请按照[Makery JavaFX教程](http://edu.makery.ch/blog/2012/11/16/javafx-tutorial-addressapp-1/),使用[官方JavaFX文档](http:// docs .oracle.com/javafx /),并确保你熟练掌握[Java编程基础知识](http://docs.oracle.com/javase/tutorial/) - 思考(真的)小项目并编写代码他们。 – jewelsea