1

問題は、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);

フレームを正しく最大化していますが、最大化イベントが既に発生しているため、リスナーであるそれを使用できません。

4

1 に答える 1

3

を使用してCardLayoutいますが、残念ながら のサイズを変更できませんJComponentCardLayoutは、同じ表示スペースを共有する 1 つまたは複数のコンポーネントを保持/管理できるためです。
使用する場合は、 を追加してJPanel、そのパネルのレイアウトを に設定する必要がありCardLayoutます。

次のドキュメントを読むことを強くお勧めします: A Visual Guide to Layout Managers

于 2015-10-01T12:10:49.563 に答える