我正试着通过正确使用不同的LayoutManagers来了解我的GUI设计技巧,通过详细了解幕后发生的事情来提高效率和效率。我正在查看BorderLayout的源代码,并且在下面从layoutContainer()方法获取的代码片段中,我注意到调用子Component的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;
}
感谢。
答案 0 :(得分:1)
某些组件在计算其首选大小时,会考虑其当前大小。因此,例如,文本区域并不真正知道它想知道它有多高,直到它知道它有多宽;然后它可以计算出它的文本包装并找出它需要多少行。
所以在这里,对setSize()
的调用实际上只是指定宽度。然后布局管理器获取并设置该宽度的首选 。