web-dev-qa-db-ja.com

JavaアプリでのMVCの使用

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

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

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

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

(この質問は 元々はスタックオーバーフローに投稿されました でしたが、このサイトはより適切な場所として質問されました)

10
egor

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

他の人と同じように、私はおそらくそのようなプロジェクトに個人的に好むテクノロジーをお勧めします 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を使い始めると明らかになります。
  • オンラインチュートリアルについては、最も関連性の高いチュートリアルにリンクしています。 完全なアプリ用の素敵なチュートリアルセット があります。
  • Pro JavaFX 2 および JavaFX 2.0 Introduction by Example は高い評価を受けています。
21
jewelsea

代わりに Model-view-presenter pattern を使用してください。 Swing heremvp4j プロジェクトを介して、適切なMVPの例を表示できます。

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

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

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

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

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

5
Cooper

必要なウィジェットは Swing または [〜#〜] swt [〜#〜] の両方にあります。ドキュメントには components (Swing)または widgets (SWT)の例が含まれているため、それらを特定するのはかなり簡単です。

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

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

2
Adrian Ber