Java Swing JFrame minimize/maximize 调整大小错误
Java Swing JFrame minimize/maximize resize bug
问题是当我尝试最大化 JFrame 时,框架确实最大化了,但内容大小被保留了。
http://i.imgur.com/7q5Yh9F.png
我的主机class:
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);
正在正确地最大化框架,但我不能使用它作为监听器,因为最大化事件已经发生。
您正在使用 CardLayout
,不幸的是,它不允许您调整 JComponent
的大小。因为 CardLayout
可以 hold/manage 共享同一显示器的一个或多个组件 space。
如果您想使用它,您应该添加 JPanel
并将该面板的布局设置为 CardLayout
。
我强烈建议阅读以下文档:A Visual Guide to Layout Managers
问题是当我尝试最大化 JFrame 时,框架确实最大化了,但内容大小被保留了。
http://i.imgur.com/7q5Yh9F.png
我的主机class:
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);
正在正确地最大化框架,但我不能使用它作为监听器,因为最大化事件已经发生。
您正在使用 CardLayout
,不幸的是,它不允许您调整 JComponent
的大小。因为 CardLayout
可以 hold/manage 共享同一显示器的一个或多个组件 space。
如果您想使用它,您应该添加 JPanel
并将该面板的布局设置为 CardLayout
。
我强烈建议阅读以下文档:A Visual Guide to Layout Managers