GridLayout(网格布局管理)
顾名思义,就是将容器分成一个个的二维表式的网格,其中布局中的每一个单元,即网格具有相同的尺寸,组件按行依次放入这些被划分出来的小格之中,组件的添加顺序是由左至右,由上到下顺序,与FlowLayout流式布局一样。这种布局管理器是按行与列排列对象的理想选择,是布局管理器中使用较多的一种。不过有一个要求,就是每个网格之中都必须要放组件,不能有空。如果GridLayout构造函数的行与列都被指定为零,则会抛出运行异常IllegalArgumentException。
在实际绘制的行与列的数目的时候也要依据容器内的组件数目而定。GridLayout会首先尝试观察所要求的行与列的数目。如果所要求的行数不为零,则列数通过(组件数+行数-1)/行数 来确定。如果我们的要求是零行,则所使用的行数由类似的公式确定:(组件数+列数-1)/列数。例如,如果我们请求一个3x3的网格,但是在布局中只放置4个组件,最终我们实际得到的是一个2x2的网格。如果我们想避免这种情况,那就要依据计划添加显示的实际对象数目来确定GridLayout尺寸。再比如,当行或列的数目设置为0(两者最多只能有一个为0),布局就会在零设置的方向上无限增长,即非零的方向固定不变,可不可以认为FlowLayout流式布局就是网格布局器的一种特例呢。
举个例子说明上面的公式:
setLayout(new GridLayout(0, 2)),并放置5各组件,则会根据上面公式计算出行数为3,即程序界面布局为3*2的网格,有6个网格放5各组件,最后一个为空,中间的不能为空。
如果组件数超过网格的数目,该布局管理器会自动增加网格的数目,原则上是保持行不变,只在列上增加。
在设计中有时候根据需求,我们不一定总能保证让每个网格处都能放置可供使用的组件,而上面的要求是不能有空的网格,那么我们也有解决方法。就是在需要的地方放置不可见的组件。比如说是空的标签等。
下面再说说该布局管理器的构造方法,有下列3种,当然也是为满足不同的场合需求:
1.GridLayout()参数为空,即默认以每行一列的方式构建一个GridLayout对象。
2. GridLayout(introw,intcolumns):根据指定行数和列数构造一个GridLayout对象,组件间距为0,就像上面所说的BorderLayout(边框布局管理)那样,有时候需要其他的间距,就要再添加一些参数老,第3种方法就是。
3. GridLayout(introw,intcolumns,int hgap,int,vgap): 根据指