1

我正在尝试正确使用不同的 LayoutManager,通过详细了解幕后发生的事情,使我的 GUI 设计技能更加高效和有效。我正在查看 BorderLayout 的源代码,在下面从 layoutContainer() 方法获取的代码片段中,我注意到对子组件的 setSize() 方法的调用,然后是 setBounds()。查看 Component 的这些方法的源代码,setSize() 实际上使用 Component.x 和 Component.y 的当前值调用 setBounds()。为什么这样做(而不是完全重复)?setBounds() 调用不会完全覆盖 setSize() 调用的结果吗?

if ((c=getChild(NORTH,ltr)) != null) {
    c.setSize(right - left, c.height);
    Dimension d = c.getPreferredSize();
    c.setBounds(left, top, right - left, d.height);
    top += d.height + vgap;
}

谢谢。

4

1 回答 1

1

某些组件在计算其首选尺寸时会考虑其当前尺寸。因此,例如,一个文本区域在知道它有多宽之前并不真正知道它想要多高;然后它可以计算出它的文本换行并计算出它需要多少行。

所以在这里,调用setSize()实际上只是指定宽度。然后布局管理器获取并设置该宽度的首选高度。

于 2012-04-14T20:32:15.257 回答