2

基本的に、このMVCの例のようにセットアップされたプログラムがあります:http://www.leepoint.net/notes-java/GUI/structure/40mvc.html

私のプログラムには、GUIをフリーズさせるかなりの時間がかかるプロセスがあります。プロセスの実行中にGUIを継続的に更新したい。これを行うには、SwingWorkerを使用する必要があると思います。MVCパターンのどこでこのSwingWorkerを呼び出すべきかわかりません。

私の考えでは、コントローラーのMultiplyListenerアクションリスナーで実行する必要があります。これは正しいでしょうか?

4

2 に答える 2

3

この場合、モデルは、おそらく反復によって、時間の経過とともに進化する数学演算です。明らかに、ここに示すように、ワーカーはモデルに属しています。このsetProgress()メソッドは、に通知しPropertyChangeListener、次に示すように、process()他のリスニングビューに通知できます

補遺:2番目のでは、ワーカーは別のモデルを更新します:という名前のグラフのデータセットcollection。次に、グラフはデータセットをリッスンし、変更に応じて自身を更新します。

引用した例では、コントローラーはモデルビューに代わってアクションリスナーをインストールします。この関連するでは、GUIアクションリスナーはそれぞれのビューに対してローカルです。いずれの場合も、Actionカプセル化に適した選択肢です。モデルは、ユーザーが開始したアクションに応じて内部状態が変化すると、オブザーバーに通知します。

于 2013-03-25T21:31:25.847 に答える
1

あなたはコントロールSwingWorkerに属していると思います。その理由を説明します。モデルは可能な限りビューにとらわれず、必要に応じて、さまざまなビューやコントロール、さらには完全に異なるGUIライブラリでも使用できるという考えで作成する必要があると思います。たとえば、現在Swing GUIでモデルを使用したいのですが、後でAndroidアプリケーションで使用したい場合はどうでしょうか。可能な限り少ない変更で使用できるようにするには、などのSwing固有のほとんどのコードをコントロールまたはビューに配置する必要があります。SwingWorker

たとえば、この回答を確認してください。

于 2013-03-31T16:09:37.253 に答える