关于布局管理器FlowLayout的思考:如何让FlowLayout自动换行

今天上午没什么事儿,打开CSDN的BBS,发现有人在问一个关于布局管理器的问题,请看:关于布局的一个问题 。说实话,开始我并不相信楼主说的这句话“然后我在JPanel外面套了一个JScrollPane,却发现图片会一直往右边加,超出JPanel的宽度则出现横向的滚动条,与预想的效果相差较大。”

于是写下下面的代码:

输出请看图:

输出图1

确实如楼主所言,里面的图片一直都是横着排的。但是我记得是可以设置FlowLayout在适当的时候换行显示的。原因,我初步分析是因为JPanel对象在放到JScrollPane对象中之后,JPanel对象就具有了延展性,而FlowLayout布局管理器只有在第一排排满的情况下,才考虑换行的。所以现在的问题就变成了如何让流布局管理器知道在何时换行。

经过n次试验和思考,终于想到了一点:同时限制JPanel对象和JScrollPane对象的大小!请看下面的代码,也经过了一些设置,看上去更舒服了吧(稍微舒服点啊,毕竟这不是问题的关键,呵呵)。

修改之后的输出如下,不仅能够自动换行,而且在拉伸总窗体的时候,能再次自动排列:

输出图2输出图3

当然楼主也提出了一个很好的建议,就是继承FLowLayout类,并重写minimumLayoutSize方法和preferredLayoutSize方法。这也是一个不错的办法。经验证也是完全没有问题的,请看代码和输出(熊猫变猴子了:)):

图片4

你可能感兴趣的:(C++,c,swing,C#,bbs)