2017-08-04 12 views
-5

私はこのような何かをできるようにするJava GUIライブラリを持っているしたいと思います:JavaFXシングルトンはなぜですか?

Window window1 = new Window(); 

window1.show(); 

Window window2 = new Window(); 

window2.show(); 

... 

しかし、JavaFXのウィンドウには、独自のクラス拡張アプリケーション内に開始する必要があり、数回インスタンス化することはできません。

JavaFXウィンドウが他のクラスと同じようにインスタンス化されないのはなぜですか?なぜそれはアプリケーションであり、ウィンドウやフレームではないのですか?なぜJavaFXはOOPを破りますか?反射と混合したシングルトンを使用する必要があるのはなぜですか?私は魔法が欲しくない、私はOOPを動作させるウィンドウオブジェクトを画面に表示したい。

+1

ウィンドウの 'Stage'を使用 –

+3

私はこの質問を「このようなフレームワークはなぜですか?」というフォームのように思われるので、このフォーラムの範囲。 (また、疑問は明らかに間違っているという前提に基づいています) –

答えて

4

しかし、JavaFXウィンドウは、アプリケーションを拡張する独自のクラス内で起動する必要があり、複数回インスタンス化することはできません。

この文は間違っている、そこにあなたがWindowクラスのコンストラクタを呼び出すことができたときには制限がありますが、それらはApplicationクラスを拡張するとは関係ありません。

JavaFXウィンドウが他のクラスと同じようにインスタンス化されないのはなぜですか?

Windowクラスのコンストラクタは保護されているため、"used only within the package and in sub-classes outside the package"にすることができます。

代わりに、アプリケーションでは、Windowのサブクラスであるクラスをインスタンス化します。使用する適切なクラスはStageです。 constructors of Stageは、Windowのように保護されているのではなく、公開されています。

ので、(窓あり)2つの段階を表示するには、あなたが書くことができます。

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

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

それはアプリケーションと呼ばれていないウィンドウまたはフレームれるのはなぜ?

アプリケーションは、それが表すものであるため、アプリケーションと呼ばれます。アプリケーション内では複数のステージ(Windowsのインスタンス)がある可能性があるので、アプリケーションをウィンドウとして呼び出すことは意味がありません。とにかく、アプリケーションは別の目的を持っています。主な目的は、アプリケーションのライフサイクルインタフェースと処理を実装することです。これはApplication javadocで説明されています。

なぜJavaFXがOOPを壊すのですか?

これはありません。これは、OOPの重要な隠蔽技術であるencapsulationを実施するためにWindow上の保護された修飾子を使用します。これは、標準アプリケーションウィンドウであるStagesや、コンテキストメニューやコンボボックスのポップアップリストの作成などのタスクを手助けする特別なウィンドウサブセットであるを介して、さまざまな目的でWindowsのサブクラスを提供します。別のクラス構造内でApplicationWindowの機能を区別することによってSeparation of Concernsを実装しています。

あなたの他の質問や声明は私には意味がありません。

+0

私は既存のアーキテクチャーにもう一つの理由を加えることができると思います。それは、EDFと同等のJavaFXに対応します。 –

関連する問題