Java:为什么 BorderLayout 调用 setSize() 后调用 setBounds()?

标签 java layout-manager

我正在尝试正确使用不同的 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/

相关文章:

java - 使用 ORMLite 更新对象及其关系

c# - 如何显示/隐藏另一个应用程序的窗口?

java swing setXXXSize() 替代方案?

java - 在 NetBeans GUI Builder 中哪里可以找到 SpringLayout 选项?

java - 在JAVA Eclipse中添加背景到JPANEL

java - Hibernate 下载选项之间的区别?

java - 在java中缩放图形时用于循环输出

java - @RepositoryRestController 和 @Repository 注释有什么区别?

java - JScrollPane 中的绝对布局面板

java - 如何动态更改 JFrame 内的 JPanel?