在我的应用程序中,通过按钮查看我显示一个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
, Blank
和Main
。在主框架中,我有一个按钮 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/