web-dev-qa-db-ja.com

Swing GUIアプリケーションを整理する方法は?

Swingを使用していくつかのGUIを作成しましたが、MVCについては知っていますが、コードを実際に整理するための良い方法を見つけられませんでした。私が探しているのは、Mavenが新しいプロジェクトごとに導入するフォルダー構造のようなものです。別の例はRailsで、MVCはフォルダー構造を通じて自動的に導入されます。 Swingにも同様のものはありますか?

より大きなSwingアプリケーションの開発について説明した本を見ていただければ幸いです。私が見つけるのは、デザインがアプリケーションの外観を指すデザインガイドラインに関する本だけです。他のSwingの本(O'Reillyなど)は、すべてのSwingコンポーネントについて詳しく説明していますが、全体像に関する情報はどこにありますか?

Swing GUIの良い例はありますか?「それが、swingのコード/フォルダー/パッケージを整理する方法です!」

編集:私は次のサイトを見つけました http://www.ibm.com/developerworks/Java/tutorials/j-springswing/section7.html GUIを作成する際のSpringの使用法について説明しています。これはかなり古い例であり、私の質問には答えませんが、正しい方向への一歩です。また、Spring RCPについても触れていますが、それが解決策になるかどうかはわかりません。

EDIT2:私はまだより良い答えを見つけられませんでした。誰かがオープンソースである理想的に構造化されたSwing GUIの例を知っていますか?誰かがそれを説明する本を知っていますか?そして、Swingでない場合は、おそらくGUI全体についてでしょうか?

51
bln-tom

それはGroovyですが、Javaではありませんが、 「Grails for Swing」である Griffon を見てください。

構築するすべてのアプリケーションに、特定の構造(ディレクトリとパターンの観点から、[〜#〜] mvc [〜#〜])を適用しますそれと。

Javaに少し適応する必要がありますが、それは一般的に良いアイデアを与えることができると思います。

さらに、GriffonはJavaでのアプリケーションの構築もサポートしており、そのための「アーキタイプ」も提供している場合があるので、それも確認できることに注意してください。

12
jfpoilpret

A Swing Architecture Overview を読むことができます。しかし、大規模なSwingアプリケーションを実行する場合、Web開発を行う場合と同じように整理することはしません。私は、Swingアプリケーションを機能的な部分に整理するだけです。例えば。アプリにフォームとテーブルを含む4つのタブがある場合、1つのタブのコンポーネントを1つのパッケージに配置します。次に、通常、フォームとテーブルが相互作用するAbstractTableModelのいくつかのカスタム実装が作成されます。また、モデルはデータのキャッシュを保持し、データベースと通信します。

私の最新のSwingアプリケーションでは、スレッドを簡単にするために Akkaアクター を使用しました。次に、すべてのSwingコンポーネントをEDTスレッドで実行し、カスタムアクターであるデータアクセスオブジェクトと通信しました。次に、データベースのデータをインターネット上のサービスと同期するいくつかのTimerTaskも使用しましたが、それらはEDTで実行されることはなく、DAO(私の俳優)とのみ通信しました。

8
Jonas

Web開発では、特定のソースとリソースのレイアウトが必要になります。これはSwingアプリケーションには当てはまりません。ここでは、目的に最も適したレイアウトを使用できます。

IDEを使用すると、生産性が大幅に向上します。 NetBeansはSwingに最適です。 NBは、クラスの保存方法にいくつかの制限を与えます。Javaパッケージと「テストパッケージ」を含む「ソースパッケージ」フォルダがありますJUnitを使用している場合は、対応するJUnitテストクラス。

Hibernateを使用する場合は、その規則を守り、whatever.entityとwhatever.utilを構築し、構成XMLファイルを「デフォルトパッケージ」に含める必要があります。

これらのパッケージをさらに編成するかどうかはプログラマ次第です。ショー全体を実行するJFrameでパッケージを作成します。そして、すべての論理ユニットのパッケージ。ときどき、AbstractTableModelsのパッケージを使用してそれらをまとめ、別のパッケージをComboBoxModelsに使用します。より深い構造を作る必要はありません。ボタンに使用するアイコン用、サウンド用などに、個別のパッケージを使用できます。Netbeansは、必要なライブラリjarを含むすべての必要なファイルが含まれる、アプリケーションの実行可能なjarファイルを作成します。

ここに小さな例があります。 「th」を除くすべてのパッケージの名前は非常に明白です。 'th'はこのアプリケーションの名前であり、アプリケーションをホストするJFrameがあります。このアプリケーションは、iReportを使用してレポートを生成します。これが「iReports」パッケージの目的です。

enter image description here

本はより小さなサンプルを説明しており、Javaの慣例にもっと関心があります。

Apache Maven を試して、アプリケーションのアーキタイプで提供されるアーキテクチャを確認できます。

6
Costis Aivalis

残念ながら(または幸いにも、それをどのように見るかによって異なります)、いくつかのデータ構造に使用できる汎用ペインを開発するのは簡単ではありません。 MはVと密接に関連していることが多く、VにはCが含まれていることがよくあります。

Vペインと対応するM構造を同じパッケージに入れる傾向があります。また、個々のペインを表示するには、中央制御の表示機能も必要です。 Cは、中央制御表示とペイン自体の間で共有されます。

これで、プロジェクトでより多くの構造が必要な場合は、highjackStruts 2 フレームワークですべてのCをいくつかに移動できますアクションとペイン(V)は、次に表示するM/Vを示します。 StrutsはもともとWebアプリケーション用に開発されましたが、Struts 2はHttpServletから切り離されました。

私自身はこれを試していませんが、いくつかの利点があります。実際に画面を表示せずに画面シーケンスをJUnitテストできます。ペインのインスタンスペインを作成し、イベントでリスニングメソッドを呼び出すだけです(マウスクリックなど)。

ただのアイデア。

0