3

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

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

有没有办法做到这一点?

4

2 回答 2

3

从javadoc:

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

因此,一旦JFrame打包和/或显示,您就不能再更改该值。如果您想更改undecorateda 的状态,JFrame您首先需要dispose()它,然后更改状态并最终使其再次可见。

于 2013-06-21T13:59:53.527 回答
0

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

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

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

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

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

于 2013-06-23T16:18:12.993 回答