我最近开始学习Java课程以熟悉编程。很抱歉,如果这似乎是一个愚蠢的问题。我想要做的是在单击按钮时调整窗口大小。
代码说的更多的话:
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class GrowShrink extends JFrame implements ActionListener {
public GrowShrink(String title) throws HeadlessException {
super(title);
setLayout(new GridBagLayout());
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
JButton buttonGrow = new JButton("Grow");
JButton buttonShrink = new JButton("Shrink");
buttonGrow.addActionListener(this);
buttonShrink.addActionListener(this);
add(buttonGrow);
add(buttonShrink);
pack();
setSize(300, 300);
setLocationRelativeTo(null);
setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("Grow")) {
getContentPane().setSize(600, 600);
getContentPane().doLayout();
// getContentPane().repaint();
} else if (e.getActionCommand().equals("Shrink")) {
getContentPane().setSize(200, 200);
// getContentPane().revalidate();
repaint();
}
}
public static void main(String[] args) {
GrowShrink growShrink = new GrowShrink("Grow and Shrink the frame");
}
}
当我按照IntelliJ的调试器操作时,在单击600x600
按钮后检查hight
和width
时,我可以清楚地看到尺寸已变为Grow
。但是,这似乎对窗口没有任何作用。
我在这里遗漏了什么吗?我曾尝试使用repaint()
,doLayout()
和revalidate()
,但没有成功。
答案 0 :(得分:3)
我尝试做的是在点击按钮时调整窗口大小。
您的代码正在设置内容窗格的大小,而不是框架。所以你需要在框架上调用setSize(...)
。
我在这里遗漏了什么吗?我尝试过repaint(),doLayout()和revalidate(),但没有成功。
Swing使用布局管理器。布局管理器负责主要根据"首选"设置组件的大小和位置。组件的大小和添加到面板的组件。
调用revalidate()
将调用布局管理器,但是没有什么会改变,因为添加到面板的组件的首选大小没有改变。
如果在执行revalidate()时内容窗格的首选大小确实发生了变化,那么您仍然需要在框架上调用pack()
以利用重新计算的首选大小。