我在使用IntelliJ最新社區版開發的Windows機器上使用Java8。爲了使JFrame能夠全屏顯示,我在下面的解決方案中找到了我想要驗證的一種不同行爲。JFrame在全屏幕沒有undecorated
解決方案,我從JFrame full screen
了按照該解決方案,我需要放三線以下,使JFrame的全屏:
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
frame.setUndecorated(true);
frame.setVisible(true);
但在項目中,我創建了一個類AppFrame.java那擴展JFrame。而在默認的構造函數中,我設置了一些基本屬性,如字體等,重要的是可見性爲true。
import javax.swing.*;
import java.awt.*;
public class AppFrame extends JFrame {
AppFrame() {
Font baseFont = new Font("Dialog", Font.PLAIN, 12);
setFont(baseFont);
setLocationRelativeTo(null);
setBackground(Color.WHITE);
setForeground(Color.black);
setLayout(new FlowLayout());
setVisible(true);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
}
而且在擴展AppFrame當我試圖把上述三條線(帶或不帶調用setVisible,這已經是從AppFrame推出),將其最大化得到以下錯誤類:
Exception in thread "main" java.awt.IllegalComponentStateException: The frame is displayable. at java.awt.Frame.setUndecorated(Frame.java:923)
作爲解決方案的一部分(我想驗證) - 通過實驗我從AppFrame.java中刪除了setVisible(true)並且它能夠工作,但是這會影響所有擴展AppFrame的類,所以我從我的類中刪除了frame.setUndecorated(true);
,並將setVisible在AppFrame中。異常消失了。另外frame.setUndecorated(true);
我相信會刪除JFrame的標題欄。
此外,以下是摘錄的javadoc JFrame的:
A frame may have its native decorations (i.e. Frame and Titlebar) turned off with setUndecorated. This can only be done while the frame is not displayable.
這將是巨大的,如果有人可以驗證此行爲。
我不確定您希望我們驗證什麼,文檔非常清晰 – MadProgrammer
*「我從AppFrame.java中刪除了setVisible(true)」* - I會認爲這是一件好事,因爲它不應該由'AppFrame'來決定應該何時顯示它,這是一個最好留給子類的實現細節 – MadProgrammer
如果你想最大化一個窗口,你可以使用['setExtendedState'](https://docs.oracle.com/javase/8/docs/api/java/awt/Frame.html#setExtendedState-int-) – MadProgrammer