如何在帧可见后调用 setUndecorated()?

2022-09-02 02:11:57

在我的 Swing 应用程序中,我希望能够在装饰和未装饰之间切换,而无需重新创建整个框架。但是,API 不允许在帧可见后调用。setUndecorated()

即使我调用 ,仍然返回 true。API表示,使帧不显示的唯一方法是重新创建它。但是,我不想仅仅为了关闭一些标题栏而重新创建框架。setVisible(false)isDisplayable()

我正在制作一个全屏应用程序,可以在全屏和窗口模式之间切换;它应该能够在保持状态等的同时进行切换。

如何在帧可见后执行此操作?


答案 1

您是否尝试过打电话然后更改它?我自己没有尝试过,但它可能会起作用。Frame.dispose()

如果没有,那么你可以做的是让框架成为类中无关紧要的部分,只有最少量的钩子才能连接到最高级别面板,然后只需将它们移动到新框架中即可。所有的孩子都会跟着。


答案 2

你不能。这就是我试图实现同样目标的经历。

但是,如果将整个 UI 放在框架中的一个面板中,则可以创建一个新框架并将该面板添加到该框架中。没有那么多工作。

像这样:

// to start with
JPanel myUI = createUIPanel();
JFrame frame = new JFrame();
frame.add(myUI);

// .. and later ...

JFrame newFrame = new JFrame();
newFrame.setUndecorated();
newFrame.add(myUI);

在 Swing 中,面板(以及组件的任何实例)一次只能位于一个帧中,因此当您将其添加到新帧时,它将立即停止在旧帧中。


推荐