2

複数のメソッドを呼び出して異なるクラスを初期化するswingアプリケーションを開発していました。また、中間結果を処理する複数のスレッドがあります。私の要件は、その中間データをその場でいくつかのラベルとテキストボックスに表示することです。

メモリとパフォーマンスの観点から、以下のアプローチのどれが最適かを教えてください。

  1. すべてのラベルとテキストボックスにセッターメソッドを設定できます。そのswingクラスオブジェクトを使用してこれらのメソッドを呼び出すことができるようにしますが、その場合、データをラベルに設定するすべてのクラスにswingクラスオブジェクトを渡す必要があります。
  2. もう1つの方法は、swingクラスのパブリック静的オブジェクトを作成でき、ラベルテキストを設定する必要があるときはいつでも任意のクラスから呼び出すことができます。

Swingクラスオブジェクトを他のクラスに渡す必要があるため、最初のメソッドはより多くのオーバーヘッドを作成します。

2番目の方法が最も簡単な方法ですが、このアプリケーションにはスレッドが含まれているため、静的オブジェクトを作成すると混乱が生じる可能性があります。

どちらを選ぶべきか、そしてその理由を知りたいだけです。

そうでなければ、誰かが複雑なスイングアプリの開発に取り組んだ場合、この種の問題をどのように管理しましたか?

4

3 に答える 3

3

このは、マルチスレッド コンテキストでの最初のアプローチの典型です。便宜上、モデルとビューは密接に結合されています。各ワーカー スレッドは、更新する必要があるラベルへの参照を受け取ります。別の方法は疎結合です。各ビューはモデルをリッスンするように登録し、オブザーバー パターンを使用してすべての登録済みリスナーに通知します。

この単純なでは、両方のアプローチを使用しています。

  • 密結合: ワーカーは、囲んでいるスコープ内のターゲット ラベルへの参照を取得します。

  • 疎結合: 囲んでいるビューは を登録しますPropertyChangeListener。これは、モデルが を介してビューに通知するために使用しますsetProgress()

アプリケーションでどちらが重要かを判断する必要があります。2番目のアプローチに関する@JB Nizetのコメントに同意します。

于 2012-07-09T16:44:12.360 に答える
1

GUI は、ビューを備えたモデルと考えてください。モデルを表すモデル クラスを作成している間に、GUI コンポーネントがビューを構成します。モデルの値に対する変更がビューに反映されます。アプリケーションの残りの部分は、ビューではなくモデルと対話します。

これは、私が行ったJava Spirograph GUIの一例です。

于 2012-07-09T14:17:36.300 に答える
1

スイングクラスの同じ単一インスタンスを使用できるシングルトン原則で2番目の方法を使用しないのはなぜですか。そのため、 static を使用する必要がなく、JVMがロードされる順序が不明なため、混乱することがあります。静的メンバー...

于 2012-07-08T18:54:48.003 に答える