使用Layout组织SWT的控件 - 1

使用Layout组织SWT的控件 - 1

SWT Composite 可以使用 Layout 来对其子控件进行布局SWT 提供了 5 种布局方式 : FillLayout, RowLayout, GridLayout, FormLayout StackLayout 。你也可以定义自己的 Layout 。下面将分别介绍这 5 Layout 以及怎样定义一个新的 Layout

FillLayout

FillLayoutSWT中最简单的Layout 它把控件以相同的大小分布在单行或者单列上FillLayout不会自动换行或者换列。通过参数你可以指定页边空白和控件之间距离的大小。

比如下面的代码

FillLayout layout  =   new  FillLayout(SWT.HORIZONTAL);
layout.marginWidth 
=   50 ;
layout.marginHeight 
=   100 ;
layout.spacing 
=   20 ;

        
将指定如下图的 Layout

使用Layout组织SWT的控件 - 1_第1张图片 

如果使用SWT.VERTICAL控件将被安置在一列上。不指定什么参数,如果只贴加一个控件将填满窗口。

用Composite.setLayout(layout)
方法可以指定一个Composite Layout

FillLayout是按照子控件被贴加的顺序对子控件进行布局的,准确地讲是以子控件保存在Composite中顺序。而改变一个子控件的Z 顺序 ( moveAbove或者moveBelow) 会改变子控件的顺序。下面的例子演示了这一点,当你点一下按钮时,两个按钮会交换位置。

     public   static   void  main(String[] args) {
        
final  Display display  =   new  Display();
        
final  Shell shell  =   new  Shell(display);

        shell.setLayout(
new  FillLayout());
        Button btn1 
=   new  Button(shell, SWT.PUSH);
        Button btn2 
=   new  Button(shell, SWT.PUSH);
        btn1.setText(
" Button A " );
        btn2.setText(
" Button B " );

        Listener listener 
=   new  Listener() {
            
public   void  handleEvent(Event event) {
                ((Button) event.widget).moveAbove(
null );
                shell.layout();
            }
        };
        btn1.addListener(SWT.Selection, listener);
        btn2.addListener(SWT.Selection, listener);

        shell.open();
        
while  ( ! shell.isDisposed()) {
            
if  ( ! display.readAndDispatch())
                display.sleep();
        }
        display.dispose();
    }

程序如下图

    使用Layout组织SWT的控件 - 1_第2张图片

    使用Layout组织SWT的控件 - 1_第3张图片

SWT要求一个Layout 的实例(Instance)只能指定给一个Composite应该避免将同一个Layout 实例指定给多个Composite FillLayout不需要另外对每个子控件指定LayoutData ,而后面讲到的另外4 个布局类会需要LayoutData ,同样的, LayoutData 的实例也是不能被多个子控件所共享的,因为Layout有可能会在LayoutData 中缓冲子控件的位置大小信息,以提高性能。FillLayout是非常简单的布局算法,多用来放置一个子控件填满父窗口,而布置多个控件在一行或者一列用RowLayout比较实用。下一节讲RowLayout。

转载请保留 http://www.blogjava.net/xilaile/archive/2007/02/17/100096.html


你可能感兴趣的:(使用Layout组织SWT的控件 - 1)