2009-05-03 14 views
1

私はSwingのGUIクラスとアプリケーションを持っている場合、どのようにこれらのオブジェクト間の通信を管理する必要がありますか? GUIオブジェクトリンクをGUIへのアプリまたはアプリリンクに渡す必要がありますか?Swing GUIにアプリケーションをリンクする最も良い方法は何ですか?

例:

public class App{ 

public App() 
{ 
    GUI gui = new GUI(this) 
} 

} 

または

public GUI{ 
public GUI() 
{ 
    App gui = new App(this) 
} 
} 

答えて

2

MVC patternを見てください。理想的には、さまざまなGUIコンポーネントがそのアプリケーションを使用できるようにアプリケーションを提示したい(アプリケーションのWeb /サーブレットビューやコマンドラインインターフェイスを後で提供することを想像してください)。この要件は、暗黙のSwing知識を持つアプリケーションを禁止します。

+0

この場合、(OPのソリューション2のように)同じオブジェクトにビューとコントローラを実装することはOKです。ビューとコントローラの分離は、ブラウザがビューであるWebアプリケーションでのみ明確に定義されています。 –

+2

Webアプリケーションには何も特別なものはありません。 MVC –

+0

唯一の違いは、Java非Webクライアント(Swing/AWTなど)は、必要に応じてMVCを使用できますが、歴史的にも現実的にも、WebアプリケーションはMVCを使用して実行可能なソリューションになることです。 – Wintermut3

0

はい、MVCパターンが役立ちます。実際には、2つのコンポーネント間の密結合を取り除きたいと思っています。

public GUI { 
    public GUI() { 
     App gui = new App(this) 
    } 
} 

そうすれば、少なくとも、アプリケーション・ロジックがに依存しない、あるいは、あなたのGUIにバインドされていますか、非常に少なくとも、意味、後者で行きます。

1

現在の回答はすべて良いですが、ここでは非常に重要なことが1つあります。「マルチスレッド」タグがありますが、まだ誰もそれに対処していません。 MVCの「C」については、スレッド化され、マネージャインターフェイスと、おそらくはビューインターフェイスを介してマネージャデザインパターンに従っていきたいと思っているかもしれません。インターフェイスを使用すると、オプションをさらに広げることができます将来のリファクタリングのために、さらには再設計するために、これまでは、コミュニケーションの問題に対処するために、java.util.observerとjava.util.observableを使用してきました。主なスレッドをブロックしないでください。そうしないと、GUIがフリーズします。はい、MVCは良いスタートですが、App-> GUIではMVCだけではないことを説明しています。GUI全体をアプリケーションのビューとして考えると、Modelは何らかの種類のデータセット(DataBase、flatfile 、状態情報)とコントローラのアプリケーション。 GUIには、少なくともインターフェースを持つ可能性があります。