【问题标题】:How is the Stage instantiated in this JavaFX sample code?这个 JavaFX 示例代码中的 Stage 是如何实例化的?
【发布时间】:2019-12-02 23:46:53
【问题描述】:

这是一个简单的 JavaFX 起点。

DemoApp 继承自 Application。应用程序有一个抽象方法,需要实现。那是@Overriden。

让我困惑的是方法的参数。它有一个类类型和一个名称。对吧?

但是如果没有 = new Stage();" ,如何实例化名称“stage”以创建对象?它只是“Stage stage”而不是“Stage stage = new阶段();”

public class DemoApp extends Application {
    @Override
    public void start(Stage stage) throws Exception {

    }
}

【问题讨论】:

  • 当通过Application#launch 启动JavaFX 应用程序时,会发生一系列事件,即documented here(在生命周期 下)。 JavaFX 运行时通过反射实例化指定的应用程序类,然后在适当的时间以适当的顺序调用生命周期方法。这意味着传递给#start(Stage)Stage 是由JavaFX 运行时(即通过内部代码)创建的,然后在调用时传递给方法。

标签: java javafx


【解决方案1】:

您的class 类似于Java class,由classloader 执行。这个classloaser的作用是通过reflection执行start函数,如果需要,还可以在你的class中执行其他函数。 在 JavaFX 的情况下,Stage 已经作为参数实例化,您可以使用它来显示Scene。所以你不必担心。 你可以阅读template设计模式和IoC,它会帮助你理解背后的原理。

【讨论】:

  • 它不仅仅是“像”java 类,它还是一个java 类。 JavaFX 只是一个 java api,因此在大多数情况下,您的所有 JavaFX 应用程序都是用 java 实现的。涉及某些库的事实并没有改变这一事实。
  • @fabian 当然,我知道。只是为了解释,我使用了like a java class 表达式。我试图在一般情况下解释它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-26
  • 1970-01-01
相关资源
最近更新 更多