2015-10-01 194 views
0

問題是,當我嘗試最大化JFrame時,框架得到最大化,但內容大小被保留。Java Swing JFrame最小化/最大化調整大小錯誤

http://i.imgur.com/7q5Yh9F.png

我的主框架類:

private CardLayout layout; 

private SettingsFrame settingsFrame; 

private Container contentPane; 
Frame frame = this; 

private ApplicationFrame() {  
    contentPane = getContentPane(); 
    layout = new CardLayout(); 
    contentPane.setLayout(layout); 
    initializeFrame(); 
    settingsFrame = new SettingsFrame(model); 
    initializeMenuBar(); 
    initializePanels();     
    showPage(FIRST_PAGE); 
    this.addWindowStateListener(listener); 
} 

public SettingsFrame getSettingsFrame() { 
    return settingsFrame; 
} 

private void initializeFrame() { 
    this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
    this.setTitle(APPLICATION_TITLE); 
    this.settingsFrame = new SettingsFrame(model); 
    this.setSize(1400, 900); 
    this.setLocationRelativeTo(null); 
}  

private void initializePanels() { 
    add(new Panel(), FIRST_PAGE); 
    add(new Panel(), SECOND_PAGE); 
    add(new Panel(), THIRD_PAGE); 
}  

我試圖做一個傾聽者,趕上最大化事件,有我想:

revalidate(); 
repaint(); 

invalidate(); 
validate(); 

但沒有成功。

我發現:

frame.setExtendedState(JFrame.MAXIMIZED_BOTH); 

被corectly最大化的框架,但我不能使用的是聽衆,因爲最大化的事件已經發生了。

+2

爲了更好地幫助更快,發佈[MCVE]或[短的,獨立的,正確的示例](http://www.sscce.org/)。 –

回答

3

您正在使用CardLayout,不幸的是您不能調整JComponent的大小。因爲CardLayout可以容納/管理共享相同顯示空間的一個或多個組件。
如果您想使用它,您應該添加一個JPanel並將該面板的佈局設置爲CardLayout

我強烈建議閱讀下列文件:A Visual Guide to Layout Managers

+2

(1+)是的,JFrame內容窗格的默認佈局管理器是BorderLayout。將組件添加到BorderLayout的「中心」時,該組件將獲得該框架可用的所有空間。因此,請單獨保留內容窗格的佈局,並使用CardLayout將框架添加到框架的內容窗格。 – camickr