【问题标题】:Java Swing JFrame minimize/maximize resize bugJava Swing JFrame 最小化/最大化调整大小错误
【发布时间】:2015-10-01 11:30:48
【问题描述】:

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

正在正确地最大化 Frame,但我不能使用它作为侦听器,因为最大化事件已经发生。

【问题讨论】:

标签: java swing resize jframe maximize-window


【解决方案1】:

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

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

【讨论】:

  • (1+) 是的,JFrame 的内容窗格的默认布局管理器是 BorderLayout。当您将组件添加到 BorderLayout 的“CENTER”时,该组件将获得框架可用的所有空间。所以不要管内容窗格的布局,并使用 CardLayout 将一个面板添加到框架的内容窗格中。
猜你喜欢
  • 1970-01-01
  • 2014-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多