为什么JavaFX单身?

时间:2017-08-04 21:57:10

标签: javafx

我想有一个Java GUI库允许这样的东西:

Window window1 = new Window();

window1.show();

Window window2 = new Window();

window2.show();

...

但是JavaFX窗口需要在它自己的扩展Application的类中启动,并且不能多次实例化。

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

1 个答案:

答案 0 :(得分:5)

  

但是JavaFX窗口需要在它自己的扩展Application的类中启动,并且不能多次实例化。

此语句错误,您可以在Window类上调用构造函数时有限制,但它们与扩展Application类无关。

  

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

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

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

因此,要显示两个阶段(即窗口),您可以写:

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

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

为什么它被称为Application而不是Window或Frame?

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

  

为什么JavaFX打破了OOP?

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

你的其他问题和陈述对我没有意义。