[Eclipse插件开发-001] SWT/JFACE布局入门总结

本文详述了SWT中的五种布局管理器:FillLayout、RowLayout、GridLayout、FormLayout与StackLayout的特点及使用方法,包括设置控件大小、位置及间距等关键参数。

=============SWT布局管理器入门总结=======================

绝对定位:
*
setBounds(int x, int y, int width, int height);
托管定位:
*
setLayout(Layout layout);
* 常见的布局有FillLayout、RowLayout、GridLayout、FormLayout、StackLayout。

===========================================
常见的布局管理器:

* 所有布局都是org.eclipse.swt.widgets.Layout的子类,Layout类是一个抽象类,每个具体的布局都要继承Layout类。
* SWT中常见的布局类:
  * FillLayout(充满式布局):在单行或者单列中放置相同大小的控件,是最简单的布局。
  * RowLayout (行列式布局):在单行或者多行中放置控件,应用了fill、wrap和spacing等选项
  * GridLayout(网格式布局):像表格一样放置控件,功能很强大,几乎能满足各种布局需要。
  * FormLayout(表格式布局):与GridLayout功能差不多的布局,可以通过定义4个边的"附加值"来放置控件。
  * StackLayout(堆栈式布局):类似堆栈式的布局,只显示最上方的控件。
* FillLayout、RowLayout、GridLayout、FormLayout在class org.eclipse.swt.layout.*包中,
* StackLayout在org.eclipse.swt.custom.*包中。


=============================================

----------------------|------------------------|--------------------------------

-| FillLayout(充满式布局)|
----------------------|------------------------|---------------------------------



设置控件布局的规则是:试图填充一行或一列,尽可能地充满整个面板,并且强制所有控件平均分配大小。
FillLayout不会自动拆行,也不能设置每个控件之间的间隙,但能够指定面板的四周的补白。
* 设置填充方式:type属性
  layout.type=SWT.HORIZONTAL/SWT.VERTICAL;// 默认水平填充
* 设置四周补白:marginHeight、marginWidth、spacing属性
  layout.marginHeight=10;// 设置上下补白高度
  layout.marginWidth=10; // 设置左右补白宽度
  layout.spacing=5;      // 设置控件之间的间隙


=================================================

----------------------|------------------------|----------------------------------------
                      | RowLayout(行列式布局)|
----------------------|------------------------|----------------------------------------



RowLayout填充控件时可以折行显示,并且可以使用RowData设置某一个指定控件的大小。
* 设置折行显示:wrap属性
  layout.wrap=true/false;// 默认为true
* 设置空间大小:pack属性
  layout.pack=false/true;// 默认为true
* 设置填充方式:type属性
  layout.type=SWT.VERTICAL/SWT.HORIZONTAL;// 默认为水平填充
* 设置是否充满整行:justify属性
  layout.justify=true/false;// 默认为false
  注:如果设置了layout.justify=true后,再设置layout.spacing属性,如果这时窗口足够大,该属性将不起作用。
* 设置补白和间隔:marginLeft、marginTop、marginRight、marginBottom、spacing
  默认大小为3像素。
  layout.marginLeft=10;
  layout.marginTop=10;
  layout.marginRight=10;
  layout.marginBottom=10;
  layout.spacing=10;
* 设置控件的大小:RowData
  setLayoutData(new RowData(int width, int height));
* 设置是否等宽或等高:fill属性
  水平同高,垂直同宽
  layout.fill=true;// 默认为false


===================================================

----------------------|------------------------|----------------------------------------
                      |GridLayout(网格式布局)|
----------------------|------------------------|----------------------------------------





* 设置网格的列数:numColumns属性
  layout.numColumns=3;// 默认为1列
  
* 设置网格等宽:makeColumnsEqualWidth属性
  layout.makeColumnsEqualWidth=true;// 默认为false
  
* 设置补白和间隔:
  marginLeft、marginTop、marginRight、marginBottom、horizontalSpacing、verticalSpacing
  默认为5像素大小。
  layout.marginLeft=10;       // 左空白
  layout.marginTop=10;        // 上空白
  layout.marginRight=10;      // 右空白
  layout.marginBottom=10;     // 下空白
  layout.horizontalSpacing=10;// 水平间隔
  layout.verticalSpacing=10;  // 垂直间隔
  
* 设置控件大小:GridData
  注:不要重用GridData对象
* 设置单元格对齐方式:horizontalAlignment和verticalAlignment属性
  1、水平对齐方式(horizontalAlignment)的样式常量(默认为SWT.BEGINNING)
  * SWT.BEGINNING(或者SWT.LEFT):左对齐
  * SWT.CENTER:水平居中
  * SWT.END(或者SWT.RIGHT):右对齐
  * SWT.FILL:水平充满整个单元格
  2、垂直对齐方式(verticalAlignment)的样式常量(默认为SWT.CENTER)
  * SWT.BEGINNING(或者SWT.TOP):上对齐
  * SWT.CENTER:垂直居中
  * SWT.END(或者SWT.BOTTOM):下对齐
  * SWT.FILL:垂直充满整个单元格
  
* 设置缩进大小:horizontalIndent和verticalIndent属性
  默认为0像素大小。
  gridData.horizontalIndent=20;// 水平缩进20像素
  gridData.verticalIndent=20;//  垂直缩进20像素
  
* 设置单元格跨行和跨列显示:horizontalSpan和verticalSpan属性
  gridData.horizontalSpan=2;// 设置水平跨越两个单元格
  gridData.verticalSpan=2;// 设置垂直跨越两个单元格
  
* 设置单元格空间的抢占方式:grabExcessHorizontalSpace和grabExcessVerticalSpace属性
  可以设置当面板变化时,单元格所抢占空间的方式,默认值为false。
  gridData.grabExcessHorizontalSpace=true;// 设置水平抢占
  gridData.grabExcessVerticalSpace=true;// 设置垂直抢占
  
* 设置的控件大小:minimumWidth和minimumHeight属性
  可以设置控件最小的宽度和高度。
  注:这两个属性仅当grabExcessHorizontalSpace=true和grabExcessVerticalSpace=true时才生效
  gridData.minimumWidth=100;// 最小宽度
  gridData.minimumHeight=100;// 最小高度
  注:设置了该属性值,即使窗口变小了,也不会超过这个值的大小。
  
* 设置控件大小:widthHint和heightHint属性
  可以设置控件的长和宽。当窗口变大时,控件的大小也会随着窗口的改变而改变。
  gridData.widthHint=100;// 设置宽度 
  gridData.heightHint=100;// 设置高度
  注:设置了widthHint和heightHint属性后只是在程序刚一运行时才会起作用,而随着窗口改变,会重新计算控件的大小。
  



=======================================================

----------------------|------------------------|----------------------------------------
                      |     
* 样式常量对照表     |
----------------------|------------------------|----------------------------------------



  创建GridData的第二种方式是使用样式常量。
     样式常量对应属性值
  GRAB_HORIZONTAL
grabExcessHorizontalSpace=true              // 设置水平抢占
  GRAB_VERTICAL
grabExcessVerticalSpace=true                // 设置垂直抢占
  
//1.水平对齐方式(horizontalAlignment)的样式常量(默认为SWT.BEGINNING)
  HORIZONTAL_ALIGN_BEGINNING
horizontalAlignment=SWT.BEGINNING//左对齐
  HORIZONTAL_ALIGN_CENTER
horizontalAlignment=SWT.CENTER     //水平居中
  HORIZONTAL_ALIGN_END
horizontalAlignment=SWT.END// * SWT.END(或者SWT.RIGHT):右对齐
  HORIAONTAL_ALIGN_FILL
horizontalAlignment=SWT.FILL//  * SWT.FILL:水平充满整个单元格
  
//  2、垂直对齐方式(verticalAlignment)的样式常量(默认为SWT.CENTER)
  VERTICAL_ALIGN_BEGINNING
verticalAlignment=SWT.BEGINNING// * SWT.BEGINNING(或者SWT.TOP):上对齐
  VERTICAL_ALIGN_CENTER
verticalAlignment=SWT.CENTER// * SWT.CENTER:垂直居中
  VERTICAL_ALIGN_END
verticalAlignment=SWT.END// * SWT.END(或者SWT.BOTTOM):下对齐
  VERTICAL_ALIGN_FILL
verticalAlignment=SWT.FILL//  * SWT.FILL:垂直充满整个单元格
  FILL_BOTH
horizontalAlignment=SWT.FILL和verticalAlignment=SWT.FILL //双向抢占式
  

=========================================================

----------------------|------------------------|----------------------------------------
                      |  FormLayout(表格式布局)|
----------------------|------------------------|----------------------------------------



FormLayout通过设置FormData四边的附加值(FormAttachment对象)来设置控件的布局。
一个附加值让一个控件指定的一边附加到父面板窗口类(Composite)的位置或者其他控件上。
所以,这种布局可以指定某两个控件的相对位置,并且能随着窗口的改变而改变。


* 设置补白和间隔:marginLeft、marginTop、marginRight、marginBottom、marginWidth、marginHeight、spacing
  默认为0像素大小。与GridLayout不同
  
* 使用FormData对象
  在创建FormData对象时,通常要指定4个边的位置。
  formData.top = new FormAttachment(0, 60);    
// 设置上边框位置
  formData.bottom = new FormAttachment(100, -5);
// 设置下边框位置
  formData.left = new FormAttachment(20, 0);
// 设置左边边框位置
  formData.right = new FormAttachment(100, -3);
// 设置右边框位置
  
* 使用FormAttachment对象
  * new FormAttachment(int numerator, int offset);
    numerator是分子数(因为默认的分母是100),所以也可以理解为所占的百分比。
    offset是偏移量,如果是正数正向偏移,若是负数则反向偏移。
  * new FormAttachment(int numerator, int denominator, int offset);
    numerator是分子数
    denominator是分母数
    offset是偏移量
    
* 设置控件的相对位置
  在使用FormAttachment对象时,可以设置相对面板的位置,也可以设置相对一控件的位置,
  可以使用FormAttachment(Control control, int offset, int alignment)构造方法。
  Control为所附加的控件对象,offset是相对于控件偏移的像素数,alignment使用样式常量,
  SWT.TOP、SWT.BOTTOM、SWT.LEFT、SWT.RIGHT、SWT.CENTER和SWT.DEFAULT表示是按照附加控件的哪个边开始偏移位置的。
  当控件设置FormAttachment对象时,可以保证在窗口调整的情况下,控件相对位置保持不变。


=============================================================

----------------------|------------------------|----------------------------------------
                      |StackLayout(堆栈式布局)|
----------------------|------------------------|----------------------------------------


StackLayout堆栈式布局类似于选项卡(TabFolder),当前只显示最上方的控件。
===========================================================

----------------------|------------------------|----------------------------------------
                      |     
Eclipse插件开发系列5.SWT中的布局管理器(4)     |
----------------------|------------------------|----------------------------------------



==============================================================================
常见的布局管理器:
* 所有布局都是org.eclipse.swt.widgets.Layout的子类,Layout类是一个抽象类,每个具体的布局都要继承Layout类。
* SWT中常见的布局类:
  * FillLayout(充满式布局):在单行或者单列中放置相同大小的控件,是最简单的布局。
  * RowLayout (行列式布局):在单行或者多行中放置控件,应用了fill、wrap和spacing等选项
  * GridLayout(网格式布局):像表格一样放置控件,功能很强大,几乎能满足各种布局需要。
  * FormLayout(表格式布局):与GridLayout功能差不多的布局,可以通过定义4个边的"附加值"来放置控件。
  * StackLayout(堆栈式布局):类似堆栈式的布局,只显示最上方的控件。
* FillLayout、RowLayout、GridLayout、FormLayout在class org.eclipse.swt.layout.*包中,
* StackLayout在org.eclipse.swt.custom.*包中。

================================================================
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值