我正在开发一个具有不同视角的基于Java Swing的应用程序。对于“主菜单”透视图,我不希望窗口(JFrame)被装饰,而在其他视角我希望窗口被装饰。换句话说,我需要动态更改装饰属性。
我曾尝试使用setUndecorated(false)
和setUndecorated(true)
,但我似乎只能在实际显示窗口之前设置一次。
有没有办法实现这个目标?
答案 0 :(得分:3)
来自javadoc:
禁用或启用此框架的装饰。只有在帧不可显示时才能调用此方法。
因此,打包和/或显示JFrame
后,您将无法再更改该值。如果您想要更改undecorated
的{{1}}状态,则首先需要JFrame
,然后更改状态并最终再次显示。
答案 1 :(得分:0)
毕竟,我不得不采取不同的方法。 正如我在上一篇评论中所述,前一种解决方案确实有效。 但是,它显示了默认的LAF窗口装饰,而我使用的是不同的LAF。 因此,结果与LAF的其他部分在图形上不一致。最后,我找到了正确的解决方案,我使用setUndecorate(true)作为我的框架。然后,当我不得不使用装饰将我的视角更改为一个时,我只需使用以下代码
contentPane.getRootPane().setWindowDecorationStyle(JRootPane.FRAME);
当我不得不恢复到非装饰视角时,我会使用
contentPane.getRootPane().setWindowDecorationStyle(JRootPane.NONE);
这种方法不需要处理窗口并再次显示(实际上产生了一个简短但仍然可见的窗口隐藏/显示)