总结:
(1)setLayout()是设置界面布局,如界面有几行几列 如jf.setLayout(new GridLayout(2,1));//容器共有2行1列。
GridLayout layout = new GridLayout();
layout.numColumns = 4; // 设置容器的列数
layout.makeColumnsEqualWidth = false;// 设置容器上的组件是否等距分开
//等价写法:
GridLayout layout = new GridLayout(4, false);
(2)而setLayoutData的作用如下,设置某一个控件所占单元格的行数列数等。
GridData gridData; // 声明一个GridData对象
Text text1 = new Text(shell, SWT.NONE);
text1.setText("1");
gridData = new GridData(GridData.VERTICAL_ALIGN_FILL);
/**
* 定义一个
*
* gridData的类型,其中VERTICAL_ALIGN_FILL代表垂直方向按单
*
* 元格拉伸对齐。下面的HORIZONTAL_ALIGN_FILL代表在水平方向上
*
* 按单元格拉伸对其,而FILL_BOTH代表双向拉伸充满。当然还有水/*平方向上的FILL_HORIZONTAL等。
**/
gridData.verticalSpan = 2;// 设置垂直方向所占用的单元格数
text1.setLayoutData(gridData); // 设置Text对象的GridData
分点概述
JFrame jf = new JFrame();
jf.setLayout(new GridLayout(2,1));//2行1列
setLayout()里头写你所要设的布局
Button button=new Button(shell,SWT.NONE);
button.setText("B1");
//设置按钮的宽为100像素,高为30像素
button.setLayoutData(new RowData(100,30));
GridData gridData=new GridData();
//设置缩进为20 像素大小
gridData.horizontalIndent=20;
button.setLayoutData(gridData);
GridLayout layout = new GridLayout();
// 设置容器的列数
layout.numColumns = 4;
// 设置容器上的组件是否等距分开
layout.makeColumnsEqualWidth = false;等价写法:GridLayout layout = new GridLayout(4, false);
GridData.grabExcessHorizontalSpace、GridData.grabExcessVerticalSpace
①GridData.grabExcessHorizontalSpace
GridData gridData = new GridData();
// 当容器大小变化时,组件所在列空间横向随容器的变化而变化
gridData.grabExcessHorizontalSpace = true;
等价写法:GridData gridData = new GridData(GridData.GRAB_HORIZONTAL);
②GridData.grabExcessVerticalSpace
GridData gridData = new GridData();
// 当容器大小变化时,组件所在行空间纵向随容器的变化而变化
gridData.grabExcessVerticalSpace = true;等价写法:GridData gridData = new GridData(GridData.GRAB_VERTICAL);
6.GridData设置2。
GridData.FILL_HORIZONTAL、GridData.FILL_VERTICAL、GridData.FILL_BOTH
① GridData.FILL_HORIZONTAL:
GridData gridData = new GridData();
// 横向对齐方式
gridData.horizontalAlignment = GridData.FILL;
gridData.grabExcessHorizontalSpace = true;
等价写法:GridData gridData = new GridData(GridData.FILL_HORIZONTAL);
②GridData.FILL_VERTICAL
GridData gridData = new GridData();
// 纵向对齐方式
7.转载:https://www.cnblogs.com/sandyflower/p/3628165.html
GridLayout的风格
GridLayout类提供了GridLayout 布局中划分网格的信息,主要通过以下几个参数进行设置。
属性:
NumColumns:通过“gridLayout.numColumns”属性可以设置父组件中分几列显示子组件。
MakeColumnsEqualWidth:通过“gridLayout. makeColumnsEqualWidth”属性可以设置父组件中子组件是否有相同的列宽,当MakeColumnsEqualWidth为true时表示每列的列宽相等。
MarginLeft:表示当前组件距离父组件左边距的像素点个数。
MarginRight:表示当前组件距离父组件右边距的像素点个数。
MarginTop:表示当前组件距离父组件上边距的像素点个数。
MarginBottom:表示当前组件距离父组件下边距的像素点个数。
HorizontalSpacing:表示子组件的水平间距。
VerticalSpacing:表示子组件的垂直间距。
GridData的相关属性
GridLayout布局的灵活之处在于它利用网格布局数据GridData。通过GridData可以设置子组件在网格中的填充方式、大小边距等信息,用户可以通过子组件的setLayoutData方法设置网格布局数据。
GridData可以控制子组件在网格中的位置大小等相关显示信息。GridData可以设置如下的一些属性。
属性:
HorizontalAlignment:表示水平对齐方式。
VerticalAlignment:表示子组件的垂直对齐方式,值和水平方式一样。
HorizontalIndent:表示子组件水平偏移多少像素。此属性和“horizontalAlignment = GridData.BEGINNING”属性一起使用。
HorizontalSpan:表示组件水平占据几个网格。
GrabExcessHorizontalSpace:表示当父组件大小改变时,子组件是否以水平方向抢占空间。
GrabExcessVerticalSpace:表示当父组件大小改变时,子组件是否以垂直方向抢占空间。
WidthHint:表示子组件的宽度为多少像素(前提是未设置其他相关属性)。
HeightHint:表示子组件的高度为多少像素(前提是未设置其他相关属性)。
另外,GridData可以通过构造函数指定相应的属性值,有兴趣的读者可以参考GridData类的构造函数。
import org.eclipse.swt.SWT;
public class GridLayoutDemo {
public static void main(String[] args) {
Display display = new Display(new DeviceData());
System.out.println(display.getBounds().width);
Shell shell = new Shell(display);
shell.setSize(500, 400);
GridLayout gridLayout = new GridLayout(); // 定义一个GridLayout对象
gridLayout.numColumns = 6; // 设定GridLayout对象的列数
shell.setLayout(gridLayout); // 设定shell的排列方式
GridData gridData; // 声明一个GridData对象
Text text1 = new Text(shell, SWT.NONE);
text1.setText("1");
gridData = new GridData(GridData.VERTICAL_ALIGN_FILL);
/**
* 定义一个
*
* /*gridData的类型,其中VERTICAL_ALIGN_FILL代表垂直方向按单
*
* /*元格拉伸对齐。下面的HORIZONTAL_ALIGN_FILL代表在水平方向上
*
* /*按单元格拉伸对其,而FILL_BOTH代表双向拉伸充满。当然还有水/*平方向上的FILL_HORIZONTAL等。
**/
gridData.verticalSpan = 2;// 设置垂直方向所占用的单元格数
text1.setLayoutData(gridData); // 设置Text对象的GridData
Text text2 = new Text(shell, SWT.NONE);
text2.setText("2");
gridData = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
gridData.horizontalSpan = 5;
text2.setLayoutData(gridData);
Text text3 = new Text(shell, SWT.NONE);
text3.setText("3");
gridData = new GridData(GridData.FILL_BOTH);
gridData.horizontalSpan = 4; // 设置水平方向上所占用的单元格数
text3.setLayoutData(gridData);
Text text4 = new Text(shell, SWT.NONE);
text4.setText("4");
gridData = new GridData(GridData.VERTICAL_ALIGN_FILL);
gridData.verticalSpan = 2;
text4.setLayoutData(gridData);
Text text5 = new Text(shell, SWT.NONE);
text5.setText("5");
gridData = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
gridData.horizontalSpan = 5;
text5.setLayoutData(gridData);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
}
注意:如果将gridLayout这个布局设置给Composite组件的时候,需要调用composite的layout方法,否则布局无法显示。