JavaアプリでのMVCの使用


10

クロスプラットフォームのGUIアプリケーションを記述して(複数のスレッドで)処理し、かなり大量のデータを視覚化する必要があります。理想的には、アプリケーションは比較的高速で見栄えがよいはずです。

アプリのインターフェイスは、テーブルウィジェット、ツリーウィジェット、およびカスタムの図形描画ウィジェットで構成されます。ユーザーはこれらのウィジェットのいずれかからデータを変更でき、変更は他のウィジェットにすぐに反映されます。

当然、MVCを使用する予定です。ただし、私は通常、すべてのGUIプログラミングをC ++ / Qtで行っており、Javaへの露出は非常に限られています。そのため、このようなアプリをJavaで整理する方法についてのアドバイスをいただければ幸いです。特に、SwingまたはJavaFXを使用する必要がありますか?仕事にどのウィジェットを選びますか?Javaプラットフォームのこれらの側面をカバーする本/オンラインチュートリアルをお勧めしますか?

フィードバックをいただければ幸いです。ありがとう!

(この質問は元々Stack Overflow投稿されていましたが、このサイトはより適切な場所として提案されました)

回答:


21

複数の異なるテクノロジーがあなたのニーズを満たすことができるので、これはすべて非常に主観的です。

他の人と同じように、おそらく私はそのようなプロジェクトに個人的に好むテクノロジ(JavaFX)をお勧めします。

JavaFXをお勧めする理由は次のとおりです。

さて、上記は少し正解だと思いますが、JavaFXを宣伝したいと思います;-)

とにかく、質問の特定のポイントに対処するには:

  • JavaFXは、クロスプラットフォームのGUIフレームワーク(現在はMac / Windows / Linux)です。
  • JavaFXには高品質のマルチスレッドサポートが組み込まれています(コアフレームワーク自体は他のほぼすべてのGUIプラットフォームと同じようにシングルスレッドですが、GUIスレッドから同時に実行する独自のタスクを定義して、GUIスレッドが残るようにすることができますレスポンシブ)。
  • 適切に作成されたJavaFXプログラムは、かなり大量のデータを視覚化するのに十分なパフォーマンスで問題があってはなりません。これを行うサンプルJavaFXプロジェクトを次に示します。
  • CSSを介してアプリケーションのスタイルを設定し、視覚効果とアニメーションを利用する機能により、デザイナーと協力して、アプリの見栄えをよくしたり、スキルがあれば自分で作成したりできます
  • JavaFXには、使用できるTableViewTreeViewがあります。Java 8リリースの準備として開発された、結合されたTreeTableコントロールもあります。
  • カスタムの図描画ウィジェットは、シーングラフの形状または直接描画キャンバスを使用できます。これは、実際にはコーディングスタイルと設定の問題です。
  • JavaFXのプロパティとそのイベントリスナーフレームワークと結合されたバインディング機能により、1つのコントロールを使用してデータを変更し、その変更を他のコントロールにすぐに反映させることができます。
  • MVCスタイルの開発では、プレーンなJavaオブジェクトを使用してモデルを記述し、FXMLマークアップ言語(必要に応じてSceneBuilderグラフィカルレイアウトツールを使用して作成)を使用してビューを定義し、Java(または必要に応じて別のスクリプト言語)で制御ロジックを定義できます。さらに、CSSを使用して、スタイルをロジックから分離する必要があります。
  • Javaへのエクスポージャーが限られているため、学習曲線は非常に大きくなります。以前にリンクしたJavaFXチュートリアルに加えて、これに役立つ優れたJavaチュートリアルがあります。JavaFXコアコードは、JDKで利用可能な機能のみを使用するため、JavaFXを使用するために、(たとえば、JavaEEを学習していた場合のように)追加のライブラリやフレームワークをたくさん学ぶ必要はありません。したがって、これらの2つのチュートリアルサイトは、習得するために必要なほとんどの情報を提供します。
  • アプリの構成について、複雑なアプリケーションがあり、完全で実証済みのクライアントアプリケーションフレームワークのバッキングが必要で、多くの追加学習を行うことを気にしない場合は、JavaFXをEclipse RCPまたはNetBeans RCPに埋め込むことができます。彼らのページにアクセスすることで、何年もの開発時間を節約できます。中小規模のプロジェクトの場合、EclipseやNetBeansなどの複雑なクライアントプラットフォームフレームワークを使用せずにJavaFXで直接コーディングする方が簡単なため、このようなプラットフォームを検討することをお勧めします。
  • SwingとJavaFXのどちらを使用する必要があるかについては、私はそれに答える最も客観的な人物ではありません。JavaFXには間違いなく欠点があります。Swingと同様に、JavaFXを使い始めると明らかになります。
  • オンラインチュートリアルについては、最も関連性の高いチュートリアルにリンクしています。完全なアプリのための素晴らしいチュートリアルセットがあります。
  • 書籍「プロJavaFX 2」および「例によるJavaFX 2.0紹介」は、高い評価を受けています。

この素晴らしい答えをありがとう!JavaFXは確かにすばらしいプラットフォームのように聞こえ、私は間違いなくそれに多くの時間を費やすつもりです。さらに、あなたが推薦した両方の本は私の図書館で入手できます:)

1
その「世界で最高のIDE」リンクは、実際にはIntelliJ IDEAを指すだけです;)すばらしい回答、非常に有益、ありがとう!
クーパー、

1
JavaFXは現在、ユーザー補助機能のサポートがないことに注意してください。これは一部の人にとっては取引ブレーカーになる可能性があり(私にとってはそうでした)、Swingを引き続き使用する必要があります。
クーパー、

JavaFXがアクセシビリティーサポートを提供するようになりました。この機能はJava 8u40で提供され、JEP 204:JavaFX Accessibilityが実装されました。
jewelsea

5

代わりに、モデルビュープレゼンターパターンを使用してください。あなたはSwingで良いMVPの例を見ることができ、ここを経由してmvp4jのプロジェクト。

Swingではありませんが、このパターンの詳細とJavaでの適用方法については、GWT Google DevelopersサイトでMVPの記事もチェックしてください。フレームワークに関係なく同じ設計原則が成り立ち、GWTはSwingに非常に似ています。

MVPの仕組みの簡単な内訳:

  • View:GUIコンポーネントを厳密に含むクラス。ロジックやモデル、イベントハンドラさえも認識していません。これにより、ビューは非常にばかげていますが、使い捨てで変更可能です。
  • Presenter:アプリケーションロジックを処理するクラス。プレゼンターは1つ(または複数)のビュークラスにバインドし、必要なすべてのアプリケーションロジックとモデルコントロールを処理します。
  • モデル:データモデルオブジェクト。これらを可能な限りPOJOのように保つことをお勧めします(プレーンな古いJavaオブジェクト)。

MVPを正しく実装すると、アプリケーションが非常に切り離され、アプリケーションの他の領域に影響を与えずに変更を加えることができます。

編集:JavaFXを使用するという決定に基づいて、以下の記事をチェックすることをお勧めします


ありがとうございました!私はJavaFXを使用することに決めたと思いますが、MVPと、このプラットフォームでMVPを使用する方法について説明します。
2012

1
すごい!MVPパターンを使用する場合は、JavaFX code.google.com/p/pennychecker-presenter/wiki/JavaFxMvpExample
Cooper

2

必要なウィジェットは、SwingSWTの両方にあります。ドキュメントには、コンポーネント(Swing)またはウィジェット(SWT)の例が含まれているので、それらを特定するのはかなり簡単です。

Swingは、JDKに含まれ、ゼロから構築されたGUIライブラリです。SWTは外部のものであり、コンポーネントはネイティブのものに基づいています。

MVCについては、どちらもサポートしています。Swingでは、基本的なデータを実際に提供する各コンポーネントのモデルがあります。コンポーネント自体は、ビューとコントローラの両方です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.