JavaFX - 为什么JavaFx创建一个主要阶段而不是允许我这样做?

时间:2014-12-25 01:55:40

标签: java javafx-8

我想创建一个名为EnhancedStage的类,它为Stage添加了功能。 问题是,javaFx创建了主要阶段并将其传递给应用程序 允许我创建它。这样我就无法将自己的类用于初级阶段。 我不明白为什么系统会创建舞台,我会失去任何东西 使用那个阶段而不是构建另一个阶段? 感谢

3 个答案:

答案 0 :(得分:1)

如果您不想使用作为start()方法参数的舞台,那么请不要在该舞台上调用show(),只需创建自己的舞台并仅调用{{ 1}}在您的自定义舞台上。我建议在start方法中执行此操作,而不是通过init的runLater调用。我认为这种方法没有任何明显的缺点。

至于为什么舞台在开始时通过,MadProgrammer的猜测就像任何一样:简化程序员的生活,从基本应用程序中删除一些样板代码并限制应用程序启动编码错误。出于所有这些原因,对于大多数人来说,我通常只是建议使用提供的舞台而不是创建自己的舞台。

如果您需要或希望在初级阶段使用阶段子类,建议采用的方法:

show()

答案 1 :(得分:0)

没有什么可以阻止你创建另一个阶段并忽略你从start方法获得的阶段。有很多方法可以做到这一点:

扩展舞台并添加您的附加功能

public class EStage extends javafx.stage.Window {

}

或扩展窗口

init

在任何一种情况下,要使用新阶段,您只需在public class ShowCase extends Application { private Stage mStage; @Override public void init() throws Exception { Platform.runLater(() -> { mStage = new EStage(); //mStage.impl_setPrimary(true); } } @Override public void start(Stage primaryStage) { mStage.setScene(...) } } 方法中创建它并在start方法中使用它,忽略提供给您的阶段

{{1}}

答案 2 :(得分:0)

JavaFX体系结构基于容器,它管理应用程序的 JavaFX事件循环(在JavaFX应用程序线程上)(这就是为什么你的入门级应用程序必须继承自javafx.application.Application)。

由于JavaFX应用程序是容器管理的,因此您可以获得一些好处:

  • 容器可以通过FXML加载器将JavaFX控件引用注入到控制器类实例中

  • 容器管理从事件循环一直到目标控件的事件传播,并在没有复杂事件处理的情况下再次备份到事件循环

当然,事件循环需要一个顶级对象来进行事件传播,这个顶级对象是Stage对象,它被传递给Application对象的start()方法。 / p>

相关问题