【发布时间】:2012-12-17 10:51:05
【问题描述】:
目标:
我希望在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)。
【问题讨论】:
-
没有发布 SSCCE 的想法,顺便说一句,JFrame.pack() 也是如此
-
@mKorbel 调用 pack() 结果相同:我将看到一个我想要避免的可视窗口调整大小。
-
您是否尝试过让 EDT 短时间休眠并直接调用您的调整大小?虽然可能不起作用,但也许值得一试。丑陋的变通办法有时可以解决丑陋的问题;)
-
@Zhedar 问题是我希望框架保持最大化。每当我调用 setSize() 时,框架都会自动从 MAXIMIZED_BOTH 状态切换到 NORMAL 状态。