我正在尝试正确使用不同的 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;
}
谢谢。
最佳答案
某些组件在计算其首选大小时,会考虑其当前大小。例如,文本区域在知道其宽度之前并不真正知道它想要多高;然后它可以计算出文本换行并计算出需要多少行。
所以在这里,对 setSize()
的调用实际上只是指定宽度。然后布局管理器获取并设置该宽度的首选高度。
关于Java:为什么 BorderLayout 调用 setSize() 后调用 setBounds()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10155698/