複数のダイアログが同時に表示されるのを防ぐ方法は?
-
03-07-2019 - |
質問
画面上にすでにダイアログが表示されている場合、ダイアログが表示されるのを避けるにはどうすればよいですか?
詳細:私のアプリケーションでは、多くのタイマーが実行されています。致命的なエラーが発生した場合、影響を受けるすべてのスレッドは(swingx.JXErrorPane.showDialog()によって)JDialogを表示しますが、これは望ましくありません。実行中のタイマーをすべてキャンセルしても、いくつかのダイアログが同時に表示されます。 1つのダイアログのみが表示されるようにするにはどうすればよいですか?
showDialog()を呼び出すメソッドを同期しようとしたため、GUI全体がブロックされました。フラグの使用も機能しませんでした。
解決
ダイアログをオブザーバーに切り替え、この新しいオブザーバーにエラーイベントを公開します( Observerデザインパターンを参照してください) )。イベントが発生すると、ダイアログが表示されます(メインフレームを親として)。ダイアログのテーブルに最近のエラーを表示します。そのテーブルの下部に新しいエラーを追加します。
もう1つのオプションは、メインフレームのテーブルにエラーを表示することです。ユーザーが最小化できるように、テーブルをJSplitPaneに配置します。
他のヒント
さらに別のオプションは、ダイアログをシングルトンに変えることです:
- ダイアログにプライベートコンストラクターを与えます。
- "プライベート静的MyDialogインスタンスを作成;" -ダイアログクラスの属性。
- " public static MyDialog getInstance(){...}; -インスタンスを返し、nullの場合は最初にインスタンス化するメソッド。
MyDialogは、ダイアログウィンドウのクラスの名前です。
ダイアログを表示する必要があるたびに、シングルトンを参照します:
MyDialog.getInstance()。showDialog();
showDialogは、ダイアログウィンドウを表示するだけです。