java - 即使框架已 setVisible(false) 也无法 SetUndecorated

标签 java swing jframe

在我的应用程序中,通过按钮查看我显示一个jframe(未装饰、MAXIMIZED_BOTH、Visible 和alwaysOnTop),然后经过一段时间后,当我完成它的工作后,我将其从按钮设置为不可见< kbd>关闭该框架本身...但是之后,当我再次单击按钮显示 jframe 时,它​​显示 Exception in thread "AWT-EventQueue-0" java.awt.IllegalComponentStateException: The frame is displayable.即使很艰难,我也将框架设置为不可见。

这么多信息足够还是您需要更多信息?

更新: 我的主文件是FormTTS.java我还有一个名为 FTDirect.java 的文件,有 3 个帧:See , BlankMain 。在主框架中,我有一个按钮 See ,它使查看框架可见,在我工作后的查看框架中,我通过按钮本身使其不可见,然后返回主框架。现在,如果我再次单击 See 按钮,我会收到错误

代码: 参见 FTDirect.java 主框架中的按钮

See.setUndecorated(true);
See.setVisible(true);
See.setAlwaysOnTop(rootPaneCheckingEnabled);
See.setExtendedState(MAXIMIZED_BOTH);
......
FTDirect.java 中查看框架中的

关闭 按钮

this.setVisible(false); //That's it

最小示例程序 (伪代码)

文件:FormTTS.java

FTdirect directform = new FTdirect();
directform.setVisible(true);
directform.setExtendedState(MAXIMIZED_BOTH);

文件:FTDirect.java

//Main frame
private void MainSeeButtonActionPerformed(java.awt.event.ActionEvent evt) {                                              
    See.setUndecorated(true);
    See.setVisible(true);
    See.setAlwaysOnTop(rootPaneCheckingEnabled);
    See.setExtendedState(MAXIMIZED_BOTH);
}
//See frame - Close Button
private void jButton5ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    See.setVisible(false);
}

结论:我单击“查看”按钮,在其中看到“查看”框架,单击“关闭”按钮,它变得不可见,现在如果我再次单击“查看”按钮,则会出现错误

最佳答案

使用 Frame#isUndecorated() 修改 See 方法的代码that 指示此框架是否未装饰。默认情况下,所有框架最初都会被装饰。

if (!See.isUndecorated()) {
    See.setUndecorated(true);
}
if(!See.isVisible()){
    See.setVisible(true);
}
See.setAlwaysOnTop(rootPaneCheckingEnabled);
See.setExtendedState(MAXIMIZED_BOTH);

关于java - 即使框架已 setVisible(false) 也无法 SetUndecorated,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23713869/

相关文章:

java - 如何仅在框架关闭后运行方法?

java - 添加 JFrame 背景导致 .JAR 损坏

java - 如何分配onGifSelected?

java - 警报对话框导致 Android 测试崩溃 - "Can' t 在未调用 Looper.prepare() 的线程内创建处理程序”

java - 使用 Retrofit 2 将图像从图库/相机上传到服务器(okhttp 问题)

Java 取消最大化 JFrame

java - CardLayout 获取所选卡片的名称

java - 自定义 Java Swing GUI 与 Netbeans 拖放编辑器

java - JButton 退出 JPanel

Java:无法从静态上下文中引用