0

私が思うに、このバグに関連する問題に対処しています: DefaultDesktopManager は InternalFrame 状態の変更を期待どおりに処理しません。

次のシナリオがあります。

私のアプリケーションは、JFrameいくつかJInternalFrameの を持つことができる で構成されています。概要ダイアログとして、JInternalFrame最大化されてデータ テーブルを表示する があります。ユーザーは、テーブル内のエンティティの詳細ダイアログを開くことができます。詳細ダイアログもJInternalFrame.

  1. 問題: 概要ダイアログが最大化されたため、詳細ダイアログも最大化されます (これは想定外です)。

  2. 問題: 詳細ダイアログが閉じられると、概要ダイアログが最大化された状態を失います。ユーザーがこのダイアログの任意のポイントをクリックすると、最大化された状態に戻ります。これはかなり見苦しく、ユーザーを混乱させます。詳細ダイアログを閉じる前に「最大化を解除」すると、概要ダイアログも最大化された状態を失い、この状態のままになります。

JFrameは、そのすべての に対して 1 つのグローバル状態しか保持できないように思えJInternalFrameます。これに対する簡単な回避策を作成する方法がわかりません。誰かが過去にこの問題を抱えていて、私を導くことができるかもしれません。

SSCCE を提供するのは少し難しいですが、これで十分かもしれません。これで詳細ダイアログを表示しています:

DetailDialog detailDialog = new DetailDialog();
applicationFrame.getDesktopPane().add(detailDialog);
detailDialog.setVisible(true);
4

2 に答える 2

1

私は自分の間違いを見つけました。ダイアログにコントローラ クラスを使用し、ダイアログの終了をそのクラスに委譲しています。コントローラーでは、たとえばいくつかの検証を行う必要があり、その後dispose()、ダイアログを呼び出します。今、私はsetClosed(true)代わりにどちらが機能するかを呼び出しています。私は、現在発生しているいくつかの発生したイベントが欠落していると思います。

于 2012-06-14T11:27:55.250 に答える