Java Swingアプリでのウィンドウ管理の設計パターン


9

最初の小さなJava Swingアプリの作成を開始しました。プログラムが開くと、ラベルと2つのボタンを備えた単一のシンプルなウィンドウが表示されます。これらのボタンの1つをクリックすると、ウェルカム画面が消去され、まったく別のパネルに置き換えられます。

その機能を作成する最良の方法が何であるかはわかりません。1つの方法はJFrame、引数としてmy を他のすべてのコンポーネントに渡すことですが、それは私にはハッキーな感じがします。または、各パネルをアクションリスナーとして2重にしていますが、それも正しくないようです。

ここで適用すべきデザインパターンはありますか?「メインウィンドウのコンテンツのみを置き換える」は、かなり一般的な操作である必要があります。パターンの名前で十分です。そこから自分でGoogleを使うことができます。(ただし、これ以上の説明にはノーとは言えません。)


これは実際のプログラミング手法に関する質問であり、おそらくスタックオーバーフローに関する多くの答えを得るでしょう。
Alex Feinman、2011年

回答:


6

Swingアプリを作成するとき、私は通常、メディエーターパターンに基づいてアプリを作成します。このパターンでは、Mediatorクラス(通常はメインのJFrame)がさまざまなGUIパーツ(通常はJPanels、JMenus ...)を処理し、それらの間の通信を処理します。

たとえば、JPanel1でイベントが発生した場合、JPanel1はメディエータ(JFrame)に通知します。次に、JFrameはJPanel2を変更してアクションを実行します。

参考までに:私のプロジェクトはすべて中小規模のGUIアプリだったので、このパターンがうまく拡張できるかどうかはわかりません。しかし、適切なアーキテクチャを設計できれば、メディエーターパターンは強固な基盤となります。


4

mainメソッドにJDialogを表示させることができます。ダイアログを閉じると、メインJFrameが作成されて表示されます。

JDialogは、カスタムコンテンツとボタンを含むダイアログを表示し、クリックされたボタンのコードを返す、使いやすい静的メソッドを提供します。この値をテストすることにより、メインメソッドはメインフレームを表示するか、終了するか(またはその他)を決定できます。Javadocをお読みください。

一部の古いUIフレームワークとは異なり、Swingアプリケーションは特定のフレームまたはウィンドウに関連付けられていません。ウィンドウはいくつでも作成できます。アプリケーションは、すべてのウィンドウが破棄されたときではなく、すべてのスレッドが終了したときに終了します。これは通常、System.exit(0)で実現されます。

そのケースに特定のデザインパターンがあるかどうかはわかりません。Java Swingチュートリアルをお勧めします。


1
-1。これはデザインパターンの質問です。与えられた仕様を変更することを推奨し、「特定のデザインパターンがあるかどうかわからない」で終わることは、それに答えません。
ポップス

2
彼の答えは非常に正確です。最初にフォームとダイアログがどのように機能するかを学ぶために必要なデザインパターンの問題はありません。
Alex

2

多くのUIフレームワークには、「メイン」ウィンドウまたは「アクティブ」ウィンドウに関して異なるルールがあります。その複雑さを管理する1つの方法は、メインメッセージループを制御するメインウィンドウを非表示にすることです(または、特に煩わしいフレームワークの場合は、画面の外にあるクロムのない1ピクセルの小さなピクセル)。次に、他のすべてのウィンドウとダイアログをそのウィンドウの子にします。

この方法には多くの利点があります。特に、グローバルキークリックやマウスイベントを処理する場合や、最上位のログ記録や例外処理で使用する場合に便利です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.