ゴール:
フレームをFrame.MAXIMIZED_BOTH
状態で表示したいのですが、ユーザーが最大化を解除すると、フレームが希望のサイズにサイズ変更されるように、事前定義された通常のサイズも必要です。そして、視覚的なサイズ変更なしで、フレームを最初に最大化して表示したい。そして、ユーザーが最大化を解除するまで、フレームを最大化したままにしておきます。
これまでに試したこと:
1)
frame.setExtendedState( Frame.MAXIMIZED_BOTH );
frame.setVisible( true );
frame.setSize( 500, 500 );
評価:フレームが通常の状態に切り替わる (最大化されたままにならない) => 良くない。
2)
frame.setSize( 500, 500 );
frame.setExtendedState( Frame.MAXIMIZED_BOTH );
frame.setVisible( true );
評価:ウィンドウ (またはそのフレームのみ) が 500x500 のサイズで表示され、その後、視覚的なサイズ変更 (最大まで) が表示されます => 良くありません。これは、フレームが表示されない場合、フレームが表示されるまで呼び出しsetExtendedState()
が延期されるためです。
3)
frame.setSize( 500, 500 );
frame.setVisible( true );
frame.setExtendedState( Frame.MAXIMIZED_BOTH );
評価:試行 #2 と同様に、フレームの視覚的なサイズ変更 => 良くありません。
4)
フレームのオーバーライドにコンポーネント リスナーを追加し、そこで状態を変更しようとしましたcomponentResize()
。また、ウィンドウ状態リスナーのオーバーライドを追加しようとしましたwindowStateChange()
。また、ウィンドウリスナーのオーバーライドを追加しようとしましたwindowOpened()
。
評価:すべて試行 #2 と同じように視覚的なサイズ変更が行われました => 良くありません。
フレームを定義済みの標準サイズにしたいが、最大化して表示したい場合はどうすればよいでしょうか?
編集:質問全体をより明確に編集し、サンプルコード(SSCCE)を追加しました。