目标:
我希望框架在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).
对我来说以下顺序有效
setSize(100,100);
setExtendedState(JFrame.MAXIMIZED_BOTH);
setVisible(true);
Run Code Online (Sandbox Code Playgroud)