java layoutmanager_【Swing基础】布局管理器 - LayoutManager

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

>>> 常见的LayoutManager —— BorderLayout

BorderLayout 比较负责任,它把整个容器的长方形区域划分成了五块,用一些 String 的 key 来记录每一块的位置: CENTER, NORTH, SOUTH, WEST, EAST

对于第一件事,BorderLayout是这么做的:

如果 NORTH 和 SOUTH 位置有控件,把它们拿出来,问它们喜欢的高度是多少,宽度必须是容器宽度,加进去分别放到顶上和底部,然后“可用的空间”减掉这两部分。然后如果 WEST 和 EAST 有控件,问它们喜欢的宽度是多少,高度必须是“当前剩余可用空间”的高度,加进去分别加到左边和右边,然后CENTER填充剩余的部分。

第二件事,根据控件的位置把它们喜欢的宽度或高度相加,算出整个容器喜欢的大小。

另外BorderLayout也支持几个其他的 key 比如 BEFORE_FIRST_LINE 等等,用的比较少可以自己参照API文档。

这里可以回答一个新手问题:

我有一个 JPanel 加进了 JScrollPane 里面,然后 jframe.add(jscrollpane),然后 jframe.pack() ,为什么不出现滚动条呢?

答:

JScrollPane 有它自己的 LayoutManager,这个LayoutManager在第二件事上尊重加进来的控件的 getPreferredSize(),所以当 jframe.pack() 的时候,JScrollPane 说: 我内部那个 JPanel 喜欢的size就是我喜欢的size。于是JPanel正好被完全显示,而 JScrollPane 默认的行为是“如果不需要就不要显示滚动条”。

这里要注意的是 jframe.add(jscrollpane); 相当于 jframe.getContentPane().add(jscrollpane, BorderLayout.CENTER);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值