SWT Layout

 Layout依据所给类型的特定规则来控制容器中组件的位置与大小。SWT有四种Layout类型:FillLayout、GridLayout、RowLayout、FormLayout。

1.将layout加入到容器中
   使用layout的第一个步骤就是创建layout的对象,第二步骤就是对容器的对象调用setLayout方法来讲layout对象加入到容器中。

s.setLayout(new FillLayout());

2.FillLayout
    FillLayout会让widget完全地填满被放置容器的工作区域,当容器调整大小时,widget也会被调整大小以继续填满容器。默认的FillLayout是水平的将widget定位以让widget相邻排列。如果想让widget垂直排列,则需要传递样式参数给FillLayout: SWT.VERTICAL

3.RowLayout
    (1)RowLayout能让widget在容器中以行来排列。当行已经被适当调整过大小的widget完全填满时,就会开启新的行来放。
    (2)RowLayout默认的行为在窗口大小不足以容下widget时可以自动换行,若不允许自动换行,可以设置RowLayout的属性warp为假,即r.warp=false即可。
    (3)RowLayout的另一个属性pack是用来控制容器内widget的初始大小,设定为true时能让RowLayout依据widget的类型与文字来设定创建出不同大小的widget。若要同一行并排的widget有同样的大小,则可以设定r.pack=false;即可。
    (4)默认的RowLayout会创建出水平的行,若需要垂直的列,则需要设置SWT.VERTICAL属性给RowLayout。

4.GridLayout
    GridLayout类似RowLayout,它也会将widget逐行放置。然而,GridLayout可以指定每行应该有几个widget,创建由行与栏所组成的网格。创建GridLayout的步骤为,先创建出GridLayout的对象,然后额外的指定网格的栏数。

GridLayout g=new GridLayout();
g.numColumns=3;

使用GridLayout可以选择性的使用相应的GridData类来帮助GridLayout完成控制widget的大小与对齐方向的功能。GridData是一种为GridLayout提供处理widget的大小与位置能力的类。每个widget都可以使用它的setLayoutData()方法来进行布局。

final Text t=new Text(s,SWT.MULTI|SWT.BORDER|SWT.WRAP);
GridData gd=new GridData();
gd.horizontalAlignment=GridData.CENTER;
t.setLayoutData(gd);
final Button b=new Button(s,SWT.PUSH);
gd=new GridData();
gd.horizontalAlignment=GridData.CENTER;
b.setLayoutData(gd);

GridData对象的设定控制了widget是如何在每一格中被定位的。相关的设定有:GridData.CENTERED、GridData.BEGINNING、GridData.END。另一个GridData设定控制了widget在格子中是如何调整大小与定位的。可用的设定有:FILL_HORIZONTAL、FILL_VERTICAL、FILL_BOTH。若一个格子被指定了FILL_HORIZONTAL设定,它会扩展本身来填满所放置的格子。另两个额外的GridData实用设定为heightHint与widthHint,它们指定了格子在调整窗口大小时所允许缩小的像素的最小值。为了让一个widget跨越多个格子,可以设定GridData的verticalSpan和horizontalSpan属性。例如gd.verticalSpan=3;

5.FormLayout

SWT的FormLayout是被设计用来简化form的程序设计的。使用FormLayout可以让你将widget固定在窗口上的特定位置,以像素或者容器宽高的百分比来指定widget的宽与高。FormLayout包括两个辅助性类:FormData与FormAttachment。这两个类是必须的,如果没有使用FormData会导致所有的widget堆叠在容器中的同一个位置。

                s.setLayout(new FormLayout());
 
  final Label lable1=new Label(s,SWT.RIGHT);
  lable1.setText("First Name");
  FormData fd=new FormData();
  fd.top=new FormAttachment(10,10);
  fd.left=new FormAttachment(0,10);
  fd.bottom=new FormAttachment(30,0);
  fd.right=new FormAttachment(40,0);
  lable1.setLayoutData(fd);
  
  final Label lable2=new Label(s,SWT.RIGHT);
  lable2.setText("Last Name");
  fd=new FormData();
  fd.top=new FormAttachment(19,5);
  fd.left=new FormAttachment(0,10);
  fd.bottom=new FormAttachment(40,0);
  fd.right=new FormAttachment(40,0);
  lable2.setLayoutData(fd);
  
  final Text t1=new Text(s,SWT.SINGLE|SWT.BORDER|SWT.WRAP);
  fd=new FormData();
  fd.top=new FormAttachment(lable1,0,SWT.TOP);
  fd.left=new FormAttachment(lable1,10);
  t1.setLayoutData(fd);
  
  final Text t2=new Text(s,SWT.SINGLE|SWT.BORDER|SWT.WRAP);
  fd=new FormData();
  fd.top=new FormAttachment(lable2,0,SWT.TOP);
  fd.left=new FormAttachment(lable2,10);
  t2.setLayoutData(fd); 
  

  FormData带有四个边的定位点,它们可以设定widget在form中的位置。四个边依序为left、right、top与bottom,都是FormData类中FormAttachment类型的对象变量。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值