2016-11-11 46 views
0

FXMLを使用するJavaFXプロジェクトを使用している場合、Model-View-Controllerパターンに準拠するようにどのように構造化しますか?これは一般的な構造が次のようになると仮定したものです。JavaFXとFXMLを使用したMVC

モデル - 基本プログラム(GUIが表すもの)。
View - FXMLファイル。
コントローラ - FXMLコントローラ。

この表現の問題点は、単にFXMLファイルであるため、モデルの変更をビューに通知できないことです。ビューはFXMLコントローラクラスであるべきですか?次に、FXMLコントローラがモデルから情報を取得し、メインコントローラがアクションイベントを処理するようなメインコントローラクラスを用意する必要がありますか?この場合、メインコントローラはどのようにJavaFXノードにアクセスしますか?

また、MVCパターンでは、メインメソッドはどこですか?今は、JavaFXアプリケーションクラスにあります。これは、プログラムの残りの部分については何もしません。また、JavaFXアプリケーションクラスをMVCパターンの一部にするか、GUIを初期化するだけでよいですか?質問の

概要(ただし完全なポストをお読みください):

  1. どのように私はMVCパターンに付着するFXMLを使用して、私のJavaFXプロジェクトを構築できますか?ビューはFXMLコントローラクラスであるべきですか?次に、FXMLコントローラがモデルから情報を取得し、メインコントローラがアクションイベントを処理するようなメインコントローラクラスを用意する必要がありますか?
  2. MVCパターンでは、メインメソッドはどこですか?
  3. JavaFXアプリケーションクラスをMVCパターンの一部にするか、GUIを初期化するだけでよいですか?
+0

あなたの状態とロジックコードであなたのGUIコードを切り離すのに最善を尽くせば、あなたのアプリケーションはMVCのように心配の分離であるため、かなりMVCのように見えます。これは実際にMVCの1つの道がないので、あなたが行きたいところに到達する最も実用的な方法かもしれません。 – NESPowerGlove

+0

また、http://stackoverflow.com/questions/32342864/applying-mvc-with-javafxとhttp://stackoverflow.com/questions/23187932/mvc-with-javafx?rq=1 –

答えて

3

どのように私は MVCパターンに付着するFXMLを使用して、私のJavaFXプロジェクトを構築できますか?表示がFXMLコントローラクラスで、 の場合、FXMLコントローラ がモデルから情報を取得し、メインコントローラが アクションイベントを処理するようなメインコントローラクラスを用意する必要がありますか?

JavaFXとSwingの両方が、一般的なコントローラの作成が難しいという正当な理由から、ビューとコントローラの間の密接な結合を促します。しかし、MVC自体にはいくつかの解釈がありますので、少し曖昧です。

ビューとコントローラの緊密な結合に関するこの正当性を考えれば、いくつかの選択肢があります。私は2つを提案し、他の人が追加したり、あるいは反対にすることもできます。

1)Viewクラスは、FXMLファイルをロードSceneStageを設定し、そのFXMLControllerクラスはモデルを観察し、ビューを更新作るためだけのダミーであることを受け入れます。

これはコントローラをJavaFXMLアプリケーションに制限します。つまり、Swingと簡単に交換することはできません。ビューの変更は、正しいコントローラを参照し、すべてのonActionまたは同等のノード属性を参照する限り、同じ参照を使用する限り、迅速かつ簡単です。

2)提供されているスケルトンコードを使用しないでください。その代わりに、ビューをFXMLファイルにロードして手動でノードにアクセスし、さらにFXMLファイルのfx:controller属性とFXMLファイルの関連ノードのonAction属性を削除します。

FXMLから必要に応じて、Nodeにアクセスできます。

これにより、独自の汎用コントローラを指定することができ、Viewクラスでモデル自体を観察することができます。

最後に、モデルはプログラムの肉であるため、ビューとコントローラからモデルを分離することが最も重要です。 Smart Model, Thin Controller, Dumb View

ここで主要な方法は?

問題ではありません。ただし、作成されたJARがJavaFX Packager Toolによって作成され、代わりにlaunchをエントリポイントとして使用する場合、JavaFXアプリケーションでは、mainメソッドが厳密には必要ありません。ただし、mainメソッドを別のクラスのエントリポイントとして使用し、代わりにApplication.launch(MyJavaFXApplicationClass.class);を呼び出すことができます。

JavaFXアプリケーションクラスはMVCパターンの一部であるか、または であればGUIを初期化するだけでよいですか?

はい、ビューの一部です。上記の2つの方法を参照してください。

+0

も参照してください。モデルを参照し、変更を観察し、必要に応じてビューを変更しますか? – Kootling

+0

「JavaFXとSwingの両方がViewとControllerの間のタイトな結合に向かってプッシュする」ということに同意します。コントローラーはFXMLファイルの「サポート」クラスのように感じます。 –

0

私の意見では、JavaFXを使い始めるすべての人が、MVCの変種の1つを実装する独自のスキームを発明しようとすると、あまり役に立ちません。代わりに既存の多くのアプリケーションフレームワーク(JavaFX用)の1つを選択し、それを理解してから、このフレームワークのガイドラインに厳密に従ってアプリケーションを構築してください。 私の個人的なお気に入りはmvvmFXですが、もちろんAfterburnerFXのような他のものを使うこともできます。このような枠組みを勉強して使用することは、ここにある多くの質問に答えてくれるはずです。

関連する問題