SWT中的GridLayout【转载】

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

GridLayout的构造函数

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

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常量

常量描述
BEGINNINGstyle 值,指定水平或垂直的对齐方式.
CENTERstyle 值,指定组件在网格中居中,水平或垂直.
ENDstyle 值,指定水平或垂直的对齐方式.
FILLstyle 值,指定组件填充网格,水平或垂直.
FILL_BOTH设置horizontalAlignmentverticalAlignmentFILL, 设置grabExcessHorizontalSpacegrabExcessVerticalSpacetrue.
FILL_HORIZONTAL设置horizontalAlignmentFILL, 和设置grabExcessHorizontalSpacetrue.
FILL_VERTICAL设置verticalAlignmentFILL, 和设置grabExcessVerticalSpacetrue.
GRAB_HORIZONTAL设置grabExcessHorizontalSpacetrue.
GRAB_VERTICAL设置grabExcessVerticalSpacetrue.
HORIZONTAL_ALIGN_BEGINNING设置horizontalAlignmentBEGINNING.
HORIZONTAL_ALIGN_CENTER设置horizontalAlignmentCENTER.
HORIZONTAL_ALIGN_END设置horizontalAlignmentEND.
HORIZONTAL_ALIGN_FILL设置horizontalAlignmentFILL.
VERTICAL_ALIGN_BEGINNING设置verticalAlignmentBEGINNING.
VERTICAL_ALIGN_CENTER设置verticalAlignmentCENTER.
VERTICAL_ALIGN_END设置verticalAlignmentEND.
VERTICAL_ALIGN_FILL设置verticalAlignmentFILL.

下面我们来看几个例子:
代码片段:
	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
运行效果
初始化:
o_GridLayout-2.jpg
调整大小后:
o_GridLayout-3.jpg
完整代码:
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();
    }


}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SWT GridLayout 是一种布局类,它可在 GUI 应用程序定位和排列控件。GridLayout 将父控制器分成几个列和行,并将每个子控件放置在一个单元格。您可以根据需要更改列和行的数量。 SWT GridLayout 类的构造函数如下所示: ```java public GridLayout() public GridLayout(int numColumns, boolean makeColumnsEqualWidth) ``` 其,第一个构造函数将创建一个包含一个列和一个布尔值的默认布局,而第二个构造函数将创建一个指定列数和布尔值的 GridLayout。 以下是一个基本示例,演示如何使用 SWT GridLayout 布局来创建两个标签和一个按钮: ```java 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.Label; import org.eclipse.swt.widgets.Shell; public class SWTGridLayoutExample { public static void main(String[] args) { Display display = new Display(); Shell shell = new Shell(display); shell.setLayout(new GridLayout(2, false)); Label label1 = new Label(shell, SWT.NONE); label1.setText("Label 1"); GridData data = new GridData(SWT.FILL, SWT.CENTER, true, false); label1.setLayoutData(data); Label label2 = new Label(shell, SWT.NONE); label2.setText("Label 2"); data = new GridData(SWT.FILL, SWT.CENTER, true, false); label2.setLayoutData(data); Button button = new Button(shell, SWT.PUSH); button.setText("Button"); data = new GridData(SWT.CENTER, SWT.CENTER, true, false, 2, 1); button.setLayoutData(data); shell.pack(); shell.open(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } display.dispose(); } } ``` 这个例子,我们创建了一个包含两个标签和一个按钮的窗口。我们使用了 GridLayout 布局,并将窗口分成两列。我们还使用了 GridData 类来设置控件的布局数据,以指定它们应该在哪个单元格显示,并设置它们的大小和位置。 这是一个简单的 SWT GridLayout 示例,您可以根据需要更改和扩展它。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值