现在的位置: 首页 > 综合 > 正文

一个功能强大的JAVA格状布局管理器

2012年11月14日 ⁄ 综合 ⁄ 共 2757字 ⁄ 字号 评论关闭

MutableGridLayout是一个功能强大的JAVA界面网格布局。

基本的布局为nm列,行间距和列间距为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)把多个单元格进行合。

基本布局经过各种切分和合并后,只要把ContainerLayout设成该布局,该布局会根据控件加进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);

抱歉!评论已关闭.