2017-08-04 61 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等價物。 –