2012-01-16 19 views
3

私はJFrameを拡張し、私のプログラムのGUIを形成するクラスを持っています。 GUIを2つの主な目的で使用したいと考えています。Java SwingのGUIコード構造

  1. ユーザーがプログラムに値を入力できるようにします。
  2. 私のプログラムで作成した値をGUIに表示したい。

私のクラスには多くのGUI要素があることを考慮すると、ソースファイルはすでにかなり大きく、すべてのプログラムコードをGUIコードにバンドルするのは良い方法ではありません。自分のコードを構造化する最良の方法は何ですか?要件1がGUIからプログラムコードへの依存関係を作成し、2番目の要件がそれとは逆の問題を抱えていると私は信じています。

私はすべての自分のGUI関連のタスクが含まれている私のGUIのための1つのクラスが欲しいです。私は私のプログラムロジックのために別のクラスが必要です。私はその後、GUIからプログラムロジッククラスからメソッドを呼び出すことができ、その逆も可能です。

+3

あなたの質問には答えられませんが、この概念はhttp://www.oracle.com/technetwork/articles/javase/mvc-136693.html Java EssentialクラスとSwingベースのGUIにも有効なコード・ロジックを手助けすることができます – mKorbel

答えて

4

教科書のMVC(Model-View-Controller)デザインパターンを探しているような感じです。要約と使用例については、Googleの "MVC Design Pattern"をお勧めします。つまり、プログラムロジックを「シングルトン」クラスに入れたいと思うかもしれません(もう一度、Googleの「シングルトンデザインパターン」)。適切に実装されたシングルトンは、コード内の他のクラスからアクセス可能でなければなりません。

また、データの格納にのみ使用される第3の中間クラスを考えてください。格納するために値を格納し、作業のためにそこから値をフェッチします。これで、コード、データ(モデル)、GUI(ビュー)、ロジック(コントローラ)の3つの明確なセグメントが作成されます。 MVC(Model-View-Controller)デザインパターンを実装したばかりです...

2

ビジネスロジックはGUIロジックに依存すべきではありません。

GUIにユーザーからの入力を受け取りますか?これらの入力をメソッド引数として使用してビジネスロジックメソッドを呼び出し、メソッドによって返された値を使用して結果をGUIに表示します。したがって、GUIはビジネスロジックに依存しますが、その逆は真ではありません。

ビジネスロジックでGUIをコールバックする必要がある場合は、明確に定義されたGUIに依存しないコールバックインターフェイスまたはリスナーを使用してコールバックする必要があります。たとえば、ビジネスロジックオブジェクトにProgressListenerを登録すると、このオブジェクトは進捗リスナーをコールバックします。 GUIにはProgressListenerの実装があり、実際にはプログレスバーやテキストエリアが更新されます。しかし、ビジネスロジックはインターフェイスに依存し、特定の実装に依存しません。

2

GUIコードを構造化するための「最良の」方法があるかどうかはわかりません。しかし一般的なルールとして、MVCに従ってください。あなたのプログラム(モデル)はではなく、はあなたのViewコードに直接依存するはずです。それが許可されていることは、モデル(またはその一部)が変更されたことをコントローラに通知すること、およびモデルの前記部分を現在表示しているビューを更新する必要があることを通知することです。

スイングでは、このタイプのコンポーネントのいくつかにこの抽象レイヤーが用意されています。ほとんどのクラスには、Modelという接尾辞が付いています。あなたが見ることができる簡単な例はBoundedRangeModelです。このようなモデルのインスタンスは、プログラムが管理するデータのすべての「ユニット」ごとに1つだけ存在し、このデータを表示するさまざまなビューはこのインスタンスを共有する必要があります。ビジネスコードはこのオブジェクトを管理し、このデータが変更されるたびに、一部のイベントリスナーを起動してGUIに通知します。