2017-08-04 63 views
-5

我想有一个Java的GUI库,允许这样的事情:为什么JavaFX是单身人士?

Window window1 = new Window(); 

window1.show(); 

Window window2 = new Window(); 

window2.show(); 

... 

但需要其自己的类扩展应用程序内启动一个JavaFX窗口,不能被实例化多次。

为什么JavaFX窗口不能像其他类一样实例化?为什么它被称为应用程序,而不是窗口或框架?为什么JavaFX会打破OOP?为什么我们不得不使用单反与反射混合?我不想要魔法,我想要一个出现在屏幕上的OOP行为窗口对象。

+1

使用'阶段'窗口 –

+3

我投票结束这个问题作为题外话,因为这个问题似乎是“为什么这个框架是这样的”,这似乎不是一个编程问题这个论坛的范围。 (此外,这个问题是基于明显错误的假设。) –

回答

4

但是,JavaFX窗口需要在自己的扩展应用程序的类中启动,并且无法多次实例化。

这种说法是错误的,也有对的时候可以调用的Window类的构造函数的限制,但它们是不相关的扩展Application类。

为什么JavaFX窗口不能像其他类一样实例化?

Window类的构造函数受到保护,所以它可以是"used only within the package and in sub-classes outside the package"

相反,在您的应用程序中,实例化一个类Window的子类。适用的类别是Stageconstructors of Stage是公开的而不是像Window那样受到保护。

因此,显示两个阶段(它们是Windows),你可以这样写:

Stage stage1 = new Stage(); 
stage1.show(); 

Stage stage2 = new Stage(); 
stage2.show(); 

为什么叫应用程序,而不是窗口或框架?

一个应用程序被称为应用程序,因为它代表什么。在一个应用程序中,你可能有多个阶段(它们是Windows的实例),因此调用一个应用程序窗口是没有意义的。无论如何,应用程序具有不同的目的:它的主要目的是实现应用程序生命周期界面和处理,如Application javadoc中所述。

为什么JavaFX会打破OOP?

它没有。它在Window上使用受保护的修饰符来强制执行encapsulation,这是OOP的一项关键隐藏技术。它通过inheritance为不同目的提供了Windows的子类,例如Stages(这是您的标准应用程序窗口)和PopupWindows,它们是专门的窗口子集,用于帮助创建上下文菜单和组合框的弹出列表等任务。它通过在单独的类结构中区分ApplicationWindow功能来实现Separation of Concerns

您的其他问题和陈述对我毫无意义。

+0

我认为我们可以为现有架构添加另一个原因:它有助于管理EDT的JavaFX等价物。 –