我可以在最大化时设置JFrame的正常大小吗?

icz*_*cza 8 java swing

目标:

我希望框架在Frame.MAXIMIZED_BOTH状态下可见,但我也希望它具有预定义的正常大小,因此当用户取消最大化时,框架将调整为我想要的大小.我希望框架首先显示最大化,而不是视觉调整大小.我希望框架保持最大化,直到用户取消最大化.

到目前为止我尝试过的事情:

1)

frame.setExtendedState( Frame.MAXIMIZED_BOTH );
frame.setVisible( true );
frame.setSize( 500, 500 );
Run Code Online (Sandbox Code Playgroud)

评估:帧将切换到正常状态(不会保持最大化)=>不好.

2)

frame.setSize( 500, 500 );
frame.setExtendedState( Frame.MAXIMIZED_BOTH );
frame.setVisible( true );
Run Code Online (Sandbox Code Playgroud)

评估:窗口(或仅其框架)将显示为500x500的大小,之后将显示视觉调整大小(最大)=>不好.这样做的原因是,如果框架不可见,则调用setExtendedState()将推迟到框架可见.

3)

frame.setSize( 500, 500 );
frame.setVisible( true );
frame.setExtendedState( Frame.MAXIMIZED_BOTH );
Run Code Online (Sandbox Code Playgroud)

评价:就像在尝试#2中一样,框架会有一个视觉调整大小=>不好.

4) 我试图在框架中添加一个组件监听器覆盖componentResize()并在那里改变状态.我也试过添加一个窗口状态监听器覆盖windowStateChange().我也试过添加一个窗口监听器覆盖windowOpened().

评估:所有这些都导致视觉调整大小,就像尝试#2 =>不好.

那么,如果我希望我的框架具有预定义的正常尺寸,但是我希望它看起来最大化,我该怎么办?

编辑:编辑整个问题更加清晰,并添加了示例代码(SSCCE).

Sta*_*avL 2

对我来说以下顺序有效

setSize(100,100);
setExtendedState(JFrame.MAXIMIZED_BOTH);
setVisible(true);
Run Code Online (Sandbox Code Playgroud)