SWT GridLayout 网格布局
GridLayout是一个非常强大的布局管理器,类似于网页中使用的表格。其强大的功能在于,可以使用GridData为每个控件设置不同的布局。
GridLayout的构造函数 构造函数描述:
public GridLayout()建立一个默认的GridLayout布局.
public GridLayout(int numColumns, boolean makeColumnsEqualWidth)建立一个GridLayout布局,拥有numColumns列,如果makeColumnsEqualWidth为true,则全部组件将拥有相同的宽度.
GridLayout有6个公共的数据成员,相对重要的是numColumns.
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控制一列中两个网络间组件的宽度,像素为单位.
属性描述
int horizontalSpacing控制一行中两个网格间组件的宽度,像素为单位.
boolean makeColumnsEqualWidth如果为true,强制全部的列拥有相同的宽度.
int marginHeight控制顶部和底部组件离边缘的距离空间,以像素为单位.
int marginWidth控制左边和右边组件离边缘的距离空间,以像素为单位.
int numColumns此GridLayout的列数目.
int verticalSpacing控制一列中两个网络间组件的宽度,像素为单位.
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都会有相同空间.
初始化: 调整大小后:
完整代码:
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();
}
}
常量描述
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都会有相同空间.
初始化: 调整大小后:
完整代码:
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();
}
}