MutableGridLayout是一个功能强大的JAVA界面网格布局。
基本的布局为n行m列,行间距和列间距为xGap,yGap,可以通造构造方法 new MutableGridLayout(int cols,int rows,int xgap,int xgap)来进行构造。
每行(列)的宽度(高度)可以通过setWidth(int num,double value)(setHeight(int num,double value))来进行每行(列)的宽度(高度)设定,如果值大于1则认为是绝对宽度,如果小于1则认为是比例,布局管理器会依此设置每行(列)的宽(高)度。
当一个基本布局完成后可以通getBox(int col,int row)来获取相应的格。
获取格后可以用split(int row,int col)或split(int row ,int col,int xGap,int yGap)来进行切分网格,也可以使用merge(int startX,int startY,int endX,int endY)把多个单元格进行合。
基本布局经过各种切分和合并后,只要把Container的Layout设成该布局,该布局会根据控件加进Container的顺序依从左到右,从上到下的顺序进行布局。
每格可以组件填充方式可以通过setFill来设置成扩充到全格或组件最佳尺寸两种方式。组件和网格之间的水平对齐方式有LEFT/CENTER/RIGHT,垂直对齐方式有TOP/MIDDLE/BOTTOM。并且格子可以设置成空setBlank(true),即组件不放到该格。
下文是一段调用的源代码,可以作为参考:
* 这是一个JAVA的布局类.
* 该类把一个容器分成x行,y列,间距为xgap,ygap,每行(列)均可以设定宽(高),即可为绝对表示(数值)也可以为相对(百分比)
* 然后使用merge和splite方法在原有的格上合并或拆分成新单元格.
* 然后按从左到右,从上到下的顺序排序,每个组件加入都可以放进相对应的格内.
* 每格的组件填充方式有:扩展填充,最佳尺寸两种方式
/**
* 合并单元格
* @param startX 起始X位置
* @param startY 起始Y位置
* @param endX 结束X位置
* @param endY 结束Y位置
*/
public void merge(int startX,int startY,int endX,int endY)
/**
* 拆分当前格,间格采用当前格的间格
* @param x 行数
* @param y 列数
*/
/**
* 获取x,y这格的Box
* @param x x轴位置
* @param y y轴位置
* @return 格子
*/
/*
* Created on 2004-10-27
*/
package com.fswan.memo;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.border.AbstractBorder;
import org.fswan.ui.MutableGridLayout;
/**
* @author Swan Fong(方志文)
*
* MutableGridLayout布局的样例程序
*/
public class TestLayout
{
public static void main(String[] args)
{
JFrame jf = new JFrame("Test Layout");
MutableGridLayout ml = new MutableGridLayout(3,4,5,5);
ml.getBox(1,1).split(2,3,10,10);
ml.getBox(2,2).setBlank(true);
ml.merge(0,2,1,3);
ml.getBox(0,2).split(3,3);
ml.getBox(0,2).getBox(0,0).split(2,2);
ml.setWidth(2,87);
ml.getBox(2,0).setFill(MutableGridLayout.PREFERRED);
ml.getBox(2,0).setAlign(MutableGridLayout.CENTER);
ml.getBox(2,0).setValign(MutableGridLayout.MIDDLE);
jf.getContentPane().setLayout(ml);
for (int i = 0; i < 30; i++)
{
jf.getContentPane().add(new JButton("Button"+i));
}
AbstractBorder d;
jf.setSize(640,480);
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
以下是一个我和MutableGridLayout写的样式
上图代码如下
MutableGridLayout ml = new MutableGridLayout(8,8,5,5);
ml.merge(2,0,3,0);
ml.getBox(2,0).split(2,1);
ml.merge(1,1,3,1);
ml.merge(5,1,7,1);
ml.merge(5,2,7,2);
ml.merge(5,3,7,3);
ml.merge(5,4,7,4);
ml.getBox(6,5).setBlank(true);
ml.getBox(7,5).setBlank(true);
ml.getBox(4,7).setBlank(true);
ml.getBox(5,7).setBlank(true);
ml.getBox(6,7).setBlank(true);
ml.getBox(7,7).setBlank(true);
ml.merge(0,7,1,7);
ml.setWidth(0,0.1);
ml.setWidth(1,0.15);
ml.setWidth(2,0.10);
ml.setWidth(3,0.15);
ml.setWidth(4,0.1);
ml.setWidth(5,0.15);
ml.setWidth(6,0.10);
ml.setWidth(7,0.15);