要确定组件的大小,您必须:
- 在某个时候手动设置它
- 运行负责布局组件的布局管理器
通常,您可以通过 getSize() 方法获得组件的确切大小,该方法返回一个包含宽度和高度的 Dimension 对象,但 getWidth/Height() 也应该可以工作。但这只有在满足两个先决条件之一的情况下才有效。如果窗口从未可见,没有布局管理器或在窗口/容器可见后添加了组件(您想知道其大小),则大小通常为零。
因此,要获得正确的大小,您必须使容器/框架可见(在添加组件之后)或在容器上调用 validate() 或 doLayout() 以重新计算布局,如果您在最后一个布局之后添加了组件已完成。要记住的另一件事是在容器上设置并可能配置布局管理器。如果没有设置布局管理器(null),即使使容器可见或调用 validate() 也不会为其子级设置大小。
minimumSize/preferredSize/maximumSize 属性是布局管理器的提示,组件应该如何调整大小,但它不必遵守它们(大多数布局管理器不需要)。
编辑 2:在我阅读了您关于同一主题的其他问题后,我认为您应该阅读The Java Tutorials 中的Using Layout Managers
编辑:我不知道你是否已经想通了,但是要对窗口大小的调整做出反应,你可以这样做:
public class WindowResizeTest extends JFrame {
public static void main(String[] args) {
new WindowResizeTest();
}
public WindowResizeTest() {
this.setSize(640, 480);
JPanel panel = new JPanel();
panel.setBackground(Color.RED);
this.add(panel);
this.addComponentListener(new ComponentListener() {
public void componentResized(ComponentEvent e) {
System.out.println(e.getComponent().getSize());
}
public void componentHidden(ComponentEvent e) {}
public void componentMoved(ComponentEvent e) {}
public void componentShown(ComponentEvent e) {}
});
this.setVisible(true);
}
}