Java 有没有办法在不重新打开的情况下移除框架装饰?

Java 有没有办法在不重新打开的情况下移除框架装饰?,java,jframe,Java,Jframe,我正在做一个简单的圣经阅读器,我想有一个全屏选项。默认情况下,帧最大化,但帧仍存在。我有一个方法,setFullScreen,可以移除装饰。但是,它在初始化后似乎不会更新。有办法解决这个问题吗 setFullScreen方法: public void setFullScreen() { mainFrame.setUndecorated(true); } main方法的一部分 UI book = new UI(); book.setLabelText(1); book.setFullSc

我正在做一个简单的圣经阅读器,我想有一个全屏选项。默认情况下,帧最大化,但帧仍存在。我有一个方法,
setFullScreen
,可以移除装饰。但是,它在初始化后似乎不会更新。有办法解决这个问题吗

setFullScreen
方法:

public void setFullScreen() {
    mainFrame.setUndecorated(true);
}
main
方法的一部分

UI book = new UI();
book.setLabelText(1);
book.setFullScreen();

同时,
setLabelText
的行为也会类似;一旦我第一次设置了它,我就无法更改它。

只有在框架不可显示的情况下才能使用方法
setUndecorated()
。您可以通过调用
dispose()
使您的帧不可显示

您的方法
setFullScreen()
可能如下所示:

public void setFullScreen() {
    mainFrame.dispose();
    mainFrame.setUndecorated(true);
    mainFrame.setVisible(true);
}
根据框架内容的不同,您可能需要显式处理
pack()
和/或
setSize()
,以获得最佳效果


顺便说一句,如果您希望它始终全屏显示/不装饰,您只需确保在使框架可显示之前调用
mainFrame.setUn装饰(true)
。框架可通过
show()。在任何给定时间,它们中只有一个应该可见。如果您的整个用户界面都在一个面板中,您只需将该面板添加到所需的框架中,即可将其从一个框架移动到另一个框架,因为这将自动将其从任何以前的父级移除。是的,它是重复的。另一个问题的公认答案是错误的。我不知道这种情况下的“官方程序”,所以我只是在这里发布了我的答案,尽管有重复。@ChristianHujer我会在“错误”答案下添加一条评论,链接到你的答案。效果不错,但转换显示窗口关闭动画,然后显示全屏。这是不可避免的。它不会比这更好,这就是类
Window
Frame
JFrame
)的工作原理。我不知道有哪个纯Java应用程序可以在全屏模式下运行,在启用或禁用全屏模式时不会“闪烁”。