第四章 第三节 使用FillLayout

第三节 使用FillLayout

返回目录

 

FillLayout是布局类中最简单的,它把所有的控件放在一行或一列,并使它们有相同的大小。它有一个公有(public)的属性和类型,决定控件是放在一行还是放在一列。可以把类型传递给构造函数,也可以在构造函数后设置类型。FillLayout的构造函数请参见表4-1

4-1FillLayout的构造函数

构造函数

说明

public FillLayout()

Constructs a FillLayout and sets type to SWT.HORIZONTAL.

public FillLayout(int type)

Constructs a FillLayout and sets type to the passed type.

type可取的值有SWT.HORIZONTALSWT.VERTICAL,它们分别把控件放在一行和一列。

注意:FillLayout不检查type的合法性,所以可以传递任意的int值。尽管FillLayout的默认设置是SWT.HORIZONTAL,但如果传递一个既非SWT.HORIZONTAL又非SWT.VERTICAL的值,它将使用SWT.VERTICAL

下面的代码创建一个水平的FillLayout并把它赋给Shell

FillLayout layout = new FillLayout();

layout.type = SWT.HORIZONTAL;

shell.setLayout(layout);

也可以裁去一行(精简一行),在构造函数中传入样式(type)就行了;下面的代码创建垂直的FillLayout

FillLayout layout = new FillLayout(SWT.VERTICAL);

shell.setLayout(layout);

如果把布局(layout)赋给Shell后不需保留layout的引用(reference),可以一步完成:

shell.setLayout(new FillLayout(SWT.VERTICAL));

我们来看一个FillLayout的例子。在下面的代码中,我们创建一个DisplayShell,然后创建一个水平的FillLayout并把它作为布局(layout)赋给Shell。接着,添加三个按钮,分别标为onetwothree,最好进入事件循环。这些代码在一行中显示三个按钮,填满了整个窗体(见图4-1)。

fig74_01_0
4-1  水平的FillLayout

要编译并运行这段代码,在examples/ch4目录下创建文件FillLayoutHorizontal.java。把清单4-1中的代码输入文件并保存。接着打开命令提示行或shell,转到examples的父目录(parent directory)。把在第三章创建的build.xml文件复制到父目录,然后输入:

清单4-1    FillLayoutHorizontal.java

 

ant -Dmain.class=examples.ch4.FillLayoutHorizontal

package examples.ch4;

 

import org.eclipse.swt.widgets.*;

import org.eclipse.swt.layout.FillLayout;

import org.eclipse.swt.SWT;

 

public class FillLayoutHorizontal {

public static void main(String[] args) {

   Display display = new Display();

   Shell shell = new Shell(display);

   shell.setLayout(new FillLayout(SWT.HORIZONTAL));

   new Button(shell, SWT.PUSH).setText("one");

   new Button(shell, SWT.PUSH).setText("two");

   new Button(shell, SWT.PUSH).setText("three");

   shell.open();

   while (!shell.isDisposed()) {

     if (!display.readAndDispatch()) {

       display.sleep();

     }

   }

   display.dispose();

}

 

 

注意要用main class的完整的包名称(full package name)。这个类编译和运行后,就可以看到如图4-1所示的窗体。

本书中,我们不再重复这些说明;在我们介绍新的代码时,沿用前面的步骤,用相应的类名称取代examples.ch4.FillLayoutHorizontal

如果像下面这样,把SWT.VERTICAL传递给FillLayout的构造函数, 这些按钮就会排成一列(见图4-2)。

shell.setLayout(new FillLayout(SWT.VERTICAL));

 fig75_01_0

4-2 垂直的FillLayout

FillLayout只能实现相对简单的布局(layout),因此多用于嵌套的复合控件(nested composite)。要实现复杂的布局,就要用到更高级的布局类(layout classes)

 

返回目录

posted @ 2011-09-10 20:51  ols  阅读(828)  评论(0编辑  收藏  举报