GridLayout 是一个非常强大的布局管理器,它可以实现很多复杂的布局,名字中暗示它将所有控件放置在类似网格的布局中.^__^GridLayout 有两个构造函数.

GridLayout的构造函数

构造函数 描述
public GridLayout() 建立一个默认的GridLayout 布局.
public GridLayout(int numColumns, boolean makeColumnsEqualWidth) 建立一个GridLayout 布局,拥有numColumns 列,如果makeColumnsEqualWidth 为true, 则全部组件将拥有相同的宽度.

GridLayout 有6个公共的数据成员,相对重要的是numColumns.

GridLayout数据成员

属性 描述
int horizontalSpacing 控制一行中两个网格间组件的宽度,像素为单位.
boolean makeColumnsEqualWidth 如果为true, 强制全部的列拥有相同的宽度.
int marginHeight 控制顶部和底部组件离边缘的距离空间,以像素为单位.
int marginWidth 控制左边和右边组件离边缘的距离空间,以像素为单位.
int numColumns 此GridLayout 的列数目.
int verticalSpacing 控制一列中两个网络间组件的宽度,像素为单位.

你能使用GridLayout 设置GridData 类来布局更多的复杂组件.GridData 有两个构造函数.

GridData构造函数

构造函数 描述
public GridData() 创建默认一个默认的GridData 对象.
public GridData(int style) 初始化指定的style风格布局.

和其它的布局类一样,GridLayout 也提供一些公共的数据成员控制它的状态,它也提供一些常量,你可以在在构造成函数中使用.你可以用过位标志"|"来连接几个不同的效果,但请注意风格不要起冲突.

GridData数据成员

属性 描述
boolean grabExcessHorizontalSpace 如果为true, 指示布局器中网格自动填充多余的水平空间,默认为false.
boolean grabExcessVerticalSpace 如果为true, 指示布局器中网格自动填写多余的垂直空间,默认为false.
int heightHint 该行中最小的高度,以像素为单位,默认为SWT.DEFAULT.
int horizontalAlignment 网格中组件水平对齐方式,可能的值为BEGINNING, CENTER, END, 和FILL.
int horizontalIndent 与左边网格的水平缩进,默认为0
int horizontalSpan 设置网格占有的列数目,默认为1
int verticalAlignment 网格中组件垂直对齐方式,可能的值为BEGINNING, CENTER, END, 和FILL.
int verticalSpan 设置网格占有的行数目,默认为1
int widthHint 该列中最小的宽度,以像素为单位,默认为SWT.DEFAULT.

GridData常量

常量 描述
BEGINNING 非style 值,指定水平或垂直的对齐方式.
CENTER 非style 值,指定组件在网格中居中,水平或垂直.
END 非style 值,指定水平或垂直的对齐方式.
FILL 非style 值,指定组件填充网格,水平或垂直.
FILL_BOTH 设置horizontalAlignment 和verticalAlignment 为FILL, 设置grabExcessHorizontalSpace 和grabExcessVerticalSpace为true.
FILL_HORIZONTAL 设置horizontalAlignment 为FILL, 和设置grabExcessHorizontalSpace 为true.
FILL_VERTICAL 设置verticalAlignment 为FILL, 和设置grabExcessVerticalSpace 为true.
GRAB_HORIZONTAL 设置grabExcessHorizontalSpace 为true.
GRAB_VERTICAL 设置grabExcessVerticalSpace 为true.
HORIZONTAL_ALIGN_BEGINNING 设置horizontalAlignment 为BEGINNING.
HORIZONTAL_ALIGN_CENTER 设置horizontalAlignment 为CENTER.
HORIZONTAL_ALIGN_END 设置horizontalAlignment 为END.
HORIZONTAL_ALIGN_FILL 设置horizontalAlignment 为FILL.
VERTICAL_ALIGN_BEGINNING 设置verticalAlignment 为BEGINNING.
VERTICAL_ALIGN_CENTER 设置verticalAlignment 为CENTER.
VERTICAL_ALIGN_END 设置verticalAlignment 为END.
VERTICAL_ALIGN_FILL 设置verticalAlignment 为FILL.
下面我们来看几个例子:
代码片段:

	GridLayout gridLayout = new GridLayout();
gridLayout.numColumns = 2;
shell.setLayout(gridLayout); new Button(shell, SWT.PUSH).setText("one");
new Button(shell, SWT.PUSH).setText("two");
new Button(shell, SWT.PUSH).setText("three");
new Button(shell, SWT.PUSH).setText("four"); 运行效果:

图中可以看到各个Button 的宽度是依靠字体长度来自动设定的,假如你想设置所有的Button 都使用相同的大小该怎么办?使用makeColumnsEqualWidth = true; 吗?不,这样做不行,它回会将各网格的大小设为相同,我们该使用GridData 中相关属性来设置Button. 下面程序中使用了GridData.FILL_BOTH 属性,它将填充所在网格水平或垂直空间,并将多余空间占有,这样不论窗口调整多大,四个Button 都会有相同空间.
当然GridLayout能做的不只是这些,要更复杂的效果,可能多个Composite 配合使用,具体请参见原书第二部分第四章:Apress.The.Definitive.Guide.to.SWT.and.JFace.eBook-LiB.chm 
运行效果 
初始化:

调整大小后: 

完整代码:

package chapter4;

 import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell; /* *
* @author HexUzHoNG Created on 2005-6-23
*
*/
public class GridLayoutDemo { public static void main(String[] args) { Display display = new Display();
Shell shell = new Shell(display); GridLayout gridLayout = new GridLayout();
// 设置为2列
gridLayout.numColumns = 2 ;
gridLayout.makeColumnsEqualWidth = true ;
shell.setLayout(gridLayout); GridData gd = new GridData(GridData.FILL_BOTH);
Button butOne = new Button(shell, SWT.PUSH);
butOne.setText( " one " );
butOne.setLayoutData(gd); gd = new GridData(GridData.FILL_BOTH);
Button butTwo = new Button(shell, SWT.PUSH);
butTwo.setText( " two " );
butTwo.setLayoutData(gd); gd = new GridData(GridData.FILL_BOTH);
Button butThree = new Button(shell, SWT.PUSH);
butThree.setText( " three " );
butThree.setLayoutData(gd); gd = new GridData(GridData.FILL_BOTH);
Button butFour = new Button(shell, SWT.PUSH);
butFour.setText( " four " );
butFour.setLayoutData(gd); shell.pack();
shell.open(); while ( ! shell.isDisposed()) {
if ( ! display.readAndDispatch()) {
display.sleep();
}
} display.dispose();
} }

SWT中的GridLayout(转)例子不错的更多相关文章

  1. 关于SWT中的GridLayout布局方式

    GridLayout 布局的功能非常强大,也是笔者常用的一种布局方式.GridLayout是网格式布局,它把父组件分成一个表格,默认情况下每个子组件占据一个单元格的空间,每个子组件按添加到父组件的顺序 ...

  2. SWT中ole/activex实践--操作word的一个例子

    http://setting.iteye.com/blog/747295 ———————————————————————————————————————————————— 这几年,做了很多word/e ...

  3. 关于SWT中的表格(TableViewer类)

    JFace是SWT的扩展.它提供了一组功能强大的界面组件.其中包含表格,树,列表.对话框,向导对话框等. 表格是一种在软件系统中很常用的数据表现形式.特别是基于数据库的应用系统.表格更是不可缺少的界面 ...

  4. 关于SWT中的Combo类和List类

    Combo类的谱系图: 一个Combo类的实例: Combo1.java public class Combo1 { public static void main(String[] args) { ...

  5. 关于SWT中的Label类和Text类

    Label类的继承关系图 Label是SWT中最简单的界面组件,给出他的一个实例如下: public class Label1 { public static void main(String[] a ...

  6. SWT中各种参数大全

    1按钮组件(Button) (1)Button组件常用样式 SWT.PUSH按钮 SWT.CHECK多选按钮 SWT.RADIO单选按钮 SWT.ARROW箭头按钮 SWT.NONE默认按钮 SWT. ...

  7. SWT中Display和Shell是个什么东东

    Display:与操作系统沟通的桥梁 我们在前面说过,每个swt程序在最开始都必须创建一个Display对象.Display对象起什么作用呢?它是swt与操作系统沟通的一座桥梁.它负责swt和操作系统 ...

  8. Spark(Python) 从内存中建立 RDD 的例子

    Spark(Python) 从内存中建立 RDD 的例子: myData = ["Alice","Carlos","Frank"," ...

  9. 详解 SWT 中的 Browser.setUrl(String url, String postData, String[] headers) 的用法

    http://hi.baidu.com/matrix286/item/b9e88b28b90707c9ddf69a6e ———————————————————————————————————————— ...

随机推荐

  1. 在命令行获取标准输入序列的反互序列,pep序列和长度信息

    近期对序列文件处理的比較多,时常要看一些核酸序列的反向互补序列,长度.可能的翻译序列. 曾经我常用seqBuider 来查看.假设能在命令行直接查看.想必是极好的. 这是一个perl脚本.只是我把它的 ...

  2. 在WEB工程的web层中的编程技巧

    本篇以看传智播客方立勋老师的<JDBC入门>之<实现客户关系管理案例>视频有感,从中提取方老师在设计管理系统的简单案例中对自己比较有用的部分,以便日后在开发过程中希望能有所帮助 ...

  3. kernel hexdump分析 (2.0)

    有的时候print_hex_dump_bytes循环打印很多信息的时候(大于1K) 用UART串口打印的信息总是会有丢失,估计是printk缓冲区的问题把,具体原因不是太清楚 于是自己写了个比较笨的d ...

  4. 基于visual Studio2013解决面试题之0210树的最远距离

     题目

  5. uva 1374 快速幂计算

    #include <iostream> #include <cstdio> #include <cmath> #include <cstring> #i ...

  6. hdoj 2066 一个人的旅行 【多源多汇最短路】

    题目:hdoj 2066 一个人的旅行 方法:缩点 + 最短路 分析:看了大神的一篇博客,讲冗余压缩的,然后就想找一个多源最短路练练手. 这个题目就是典型的多源多汇最短路 方法:把全部的源点压缩成一个 ...

  7. Android学习笔记(十三)——碎片(一)

    碎片 碎片可看作第二种形式的活动,能够创建碎片来包括视图. 碎片总是嵌入在活动中,一般有两种常见形式: 1.碎片A和碎片B分别处于不同的活动中,当选择碎片A中的某一项时,触发碎片B启动: 2.碎片A和 ...

  8. 简单概率dp(期望)-zoj-3640-Help Me Escape

    题目链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4808 题目大意: 有n条路,选每条路的概率相等,初始能力值为f,每 ...

  9. 使用XML的五种场合,XML基本规则,XML的术语,结构与语法

    在很多研讨会和培训班上我遇到过许多人,他们还不明白为什么要使用XML也不知道如何 在他们的应用中使用XML.一些来自诸如Gartner公司的报告建议说,商业公司不能再做 局外人了,不能对XML置之不理 ...

  10. JSP内置对象Session

    创建和获取客户的会话 setAttribute()与getAttribute() session.setAttribute(String name , Object obj) 如session.set ...