动态显示和隐藏JFrame装饰

时间:2013-06-21 13:20:25

标签: java swing window-decoration

我正在开发一个具有不同视角的基于Java Swing的应用程序。对于“主菜单”透视图,我不希望窗口(JFrame)被装饰,而在其他视角我希望窗口被装饰。换句话说,我需要动态更改装饰属性。

我曾尝试使用setUndecorated(false)setUndecorated(true),但我似乎只能在实际显示窗口之前设置一次。

有没有办法实现这个目标?

2 个答案:

答案 0 :(得分:3)

来自javadoc:

  

禁用或启用此框架的装饰。只有在帧不可显示时才能调用此方法。

因此,打包和/或显示JFrame后,您将无法再更改该值。如果您想要更改undecorated的{​​{1}}状态,则首先需要JFrame,然后更改状态并最终再次显示。

答案 1 :(得分:0)

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

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

当我不得不恢复到非装饰视角时,我会使用

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

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