动态显示和隐藏JFrame窗口装饰

3
我正在开发一个基于Java Swing的应用程序,具有不同的观点。 对于“主菜单”视图,我不希望窗口(JFrame)被装饰,而在其他视图中,我希望窗口被装饰。 换句话说,我需要动态更改装饰属性。
我已经尝试使用setUndecorated(false)setUndecorated(true),但似乎只能在显示窗口之前设置一次。
有没有办法实现这一点?
2个回答

3

来自Javadoc:

禁用或启用此窗体的装饰。此方法只能在窗体不可显示时调用。

因此,一旦 JFrame 被打包和/或显示,就无法再更改该值。如果您想要更改 JFrameundecorated 状态,您需要先 dispose() 它,然后更改状态,最后再次使其可见。


它按照你所描述的工作,谢谢!该过程在“Window.dispose()`文档中有描述,但我不知道去哪里查找。 - magomar

0

毕竟,我不得不采取不同的方法。 前面的解决方案确实有效,正如我在上一条评论中所述。 但是,它显示了默认的LAF窗口装饰,而我正在使用不同的LAF。 因此,结果与其余LAF在图形上不一致。最后,我找到了正确的解决方案,我为我的框架使用了setUndecorate(true)。然后,当我必须切换到使用装饰的视角时,我只需要使用以下代码:

contentPane.getRootPane().setWindowDecorationStyle(JRootPane.FRAME);

当我需要恢复到非装饰视角时,我使用

contentPane.getRootPane().setWindowDecorationStyle(JRootPane.NONE);

这种方法不需要处理窗口并再次显示它(这实际上会产生一个短暂但仍然可见的窗口隐藏/显示)


这个程序使用了哪个LAF?它似乎无法与OS X Aqua LAF(Java8 / OS X 10.9.5)一起工作。 - Hendrik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接