10

私はスイングが初めてですが、下降GUIを作成することができました。
私の問題は、リファレンス/チュートリアルで提案されているパターン、主に MVC パターンを適用できなかったことです。

それは私ですか、それとも JTree で SwingWorker を使用すると、コントローラー/ビュー/モデルを明確に分離することはできませんか?
たとえば、私は Swingworker を使用していますが、コントローラーをデザインに「適合させる」ことができません。

つまり、コントロールのアクションは基本的に、ボタンのアクション実行などの内部にある doBackground メソッドにあります。
したがって、コントローラークラスはありません。

Swing ワーカーでのアクションの結果は Jtree を更新することなので、モデルという名前のクラスに結果を渡しますが、このクラスは JFrame 内にある Jtree の treeModel、つまりビューにアクセスする必要があるため、ビューとモデルの明確な分離。

私は多くのチュートリアルを見ましたが、MVC を提示するすべてに些細な例があり、ほとんどの場合、ビュー (これは単なるラベルでした!) がすべてを更新しました。私は完全に混乱していますか、それとも、swingworkers と jtree を使用するスイング アプリケーションに MVC パターンを統合することは不可能であるか、少なくとも簡単ではありませんか?

Swing コンポーネントに実装されている MVC ではなく、実際のドメイン データについて話しているのです。

誰かが私を助けてくれますか (そして、このひどい頭痛から解放してくれますか)、この設計にどのようにアプローチできるかの概要、または少なくとも、重要な例を使用した便利なチュートリアルを提供してくれますか?

ありがとう

4

4 に答える 4

7

私がより大きなアプリケーションを構築した場合(開発の人年)、個々のコンポーネントの上にあるMVCアーキテクチャをトップレベルのコントローラー/モデルとビューに抽象化し、個々のコンポーネントが独自のパーソナライズされたMVCになることを受け入れることがよくあります。GeoffreyZhengの評価は完全に正しいものであり、Swing環境での開発について私が実際に気に入っているものです。そうは言っても、真のMVCが必要な場合は、おそらく個々のコンポーネントから抽象化し、より抽象的な用語でビューについて話す必要があります。

于 2010-09-13T18:54:52.423 に答える
5

以前は Sun として知られていた会社が公然と認めているように、Swing は厳密には MVC ではありません。

(従来の MVC 分離) は、コンポーネントのビューとコントローラーの部分が密結合を必要とするため、実際にはうまく機能しませんでした (たとえば、ビューの詳細を知らない汎用コントローラーを作成することは非常に困難でした)。 . そこで、これら 2 つのエンティティを 1 つの UI (ユーザー インターフェイス) オブジェクトにまとめました。

JTree の場合、ご想像のとおり、モデルとして TreeModel があります。JLabel のようないくつかの単純なコンポーネントには、モデルさえありません。

リンクがさらに説明しているように、LAF が提供する UI クラスを使用すると、特定のレベルの分離が得られます。ただし、Swing コンポーネント自体は、多くの UI 関連のプロパティを維持および制御する必要があります。

于 2010-09-13T18:46:32.517 に答える
4

それでも多くの場合、それは望ましく、可能です。もちろん、コントローラーはアクションを担当するコンポーネントについて知る必要がありますが、それでもビューには特定のアクションの実装は必要ありません。ビュークラスにアクションを実装するのではなく、コントローラー(ビューとモデルを認識している)を使用します。そのため、そこにアクションリスナーを追加し、たとえばSwingWorker内であっても、モデルの詳細を更新します。

それがそのように実装されていることを知るまで私が見たほとんどすべての例では、これがjtreeのような他のコンポーネントとどこが違うのかわかりません。

たぶん、MVCとMVP(私が好む)の違いを見てみると、理解しやすいです:MVCまたはMVP

于 2010-09-13T18:54:23.263 に答える
1

これが役立つかどうかはわかりませんが、Swing Application Framework(SAF)(JSR 296)を試してください。私がこれを読んだり試したりする限り、ビューをイベント処理から分離するのに役立ちます。しかし、より複雑な例(JTreeなど)については詳しく説明していません。

http://java.sun.com/developer/technicalArticles/javase/swingappfr/

https://appframework.dev.java.net/

幸運を!

于 2010-09-13T18:53:15.737 に答える