Java Swing JFrame最小化/最大化调整大小错误

时间:2015-10-01 11:30:48

标签: java swing resize jframe maximize-window

问题在于,当我尝试最大化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);

是最大化框架的核心,但我不能使用那是监听器,因为已经发生了最大化事件。

1 个答案:

答案 0 :(得分:3)

您正在使用CardLayout,但遗憾的是,您无法调整JComponent的大小。因为CardLayout可以保存/管理共享相同显示空间的一个或多个组件 您应该添加JPanel并将该面板的布局设置为CardLayout,如果您希望使用它。

我强烈建议您阅读以下文档:A Visual Guide to Layout Managers