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