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