Eclipse界面编写实例(2)--理解布局2

原创 2004年09月19日 19:35:00

第二节 标准布局

2.1. FillLayout

FillLayout是最简单的布局类,它把组件摆放在一行或者一列,并强制组件大小一致。一般的,组件的高度与最高组件一致,宽度与最宽组件一致。FillLayout不折行,不能设置边界距离和间距。可以使用它布局任务栏或工具栏,或者在Group中的一组选择框。当容器只有一个子组件时也可以使用它。例如如果一个Shell只有一个Group子组件,FillLayout将使Group完全充满Shell

       以下是相关代码。首先创建了一个FillLayout,然后设置它的type域值为SWT.VERTICAL,再把它设置到容器上(一个Shell)。示例的Shell有三个按钮,B1, B2, Button 3。注意在FillLayout中,所有的子组件尺寸都相同,并且充满了全部可用的空间:

   FillLayout fillLayout = new FillLayout();

   fillLayout.type = SWT.VERTICAL;

   shell.setLayout(fillLayout);

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

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

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

       下图显示了水平和垂直布局时,以及在初始状态和调整大小之后,FillLayout的不同表现:

 

初始状态
调整大小后

fillLayout.type = SWT.HORIZONTAL

(default)

fillLayout.type = SWT.VERTICAL

2.2 RowLayout

RowLayoutFillLayout更常用,它可以提供折行显示,以及可设置的边界距离和间距。它有几个可设置的域。另外可以对每个组件通过setLayoutData方法设置RowData,来设置它们的大小。

2.2.1 RowLayout的可设置域

type *2.0新添加*

type域控制RowLayout是水平还是垂直布局组件。默认为水平布局。

wrap

       wrap域控制RowLayout在当前行没有足够空间时是否折行显示组件。默认折行显示。

pack

       pack域为true时,组件使用他们的原始尺寸,并且排列时尽量远离左边(and they will be aligned as far to the left as possible?)。如果pack域为false,组件将填充可用的空间,跟FillLayout类似。默认为true

justify

justify域为true时,组件将在可用的空间内从左到右伸展。如果容器变大了,那么多余的空间被平均分配到组件上。如果packjustify同时设为true,组件将保持它们的原始大小,多余的空间被平均分配到组件之间的空隙上。默认的false

MarginLeft, MarginTop, MarginRight, MarginBottom 以及 Spacing

       这些域控制组件之间距离(spacing,均以像素记),以及组件与容器之间的边距。默认的,RowLayout保留了3个像素的边距和间距。下图示意了边距和间距:

2.2.2 RowLayout 示例

       下面的代码创建了一个RowLayout,并设置各个域为非默认值,然后把它设置到一个Shell

   RowLayout rowLayout = new RowLayout();

   rowLayout.wrap = false;

   rowLayout.pack = false;

   rowLayout.justify = true;

   rowLayout.type = SWT.VERTICAL;

   rowLayout.marginLeft = 5;

   rowLayout.marginTop = 5;

   rowLayout.marginRight = 5;

   rowLayout.marginBottom = 5;

   rowLayout.spacing = 0;

   shell.setLayout(rowLayout);

如果使用默认设置,只需要一行代码即可:

   shell.setLayout(new RowLayout());

下图显示了设置不同域值的结果:

 

初始状态
调整尺寸后

wrap = true

pack = true

justify = false

type = SWT.HORIZONTAL

(默认)

wrap = false

(没有足够空间时裁边)

pack = false

(所有组件尺寸一致)

justify = true

(组件根据可用空间进行伸展)

type = SWT.VERTICAL

(组件垂直按列排列)

2.2.3 在RowLayout 上配合使用RowData

       每个由RowLayout控制的组件可以通过RowData来设置其的原始的尺寸。以下代码演示了使用RowData改变一个Shell里的按钮的原始尺寸:

import org.eclipse.swt.*;

import org.eclipse.swt.widgets.*;

import org.eclipse.swt.layout.*;

public class RowDataExample {

   public static void main(String[] args) {

       Display display = new Display();

       Shell shell = new Shell(display);

       shell.setLayout(new RowLayout());

       Button button1 = new Button(shell, SWT.PUSH);

       button1.setText("Button 1");

       button1.setLayoutData(new RowData(50, 40));

       Button button2 = new Button(shell, SWT.PUSH);

       button2.setText("Button 2");

       button2.setLayoutData(new RowData(50, 30));

       Button button3 = new Button(shell, SWT.PUSH);

       button3.setText("Button 3");

       button3.setLayoutData(new RowData(50, 20));

       shell.pack();

       shell.open();

       while (!shell.isDisposed()) {

          if (!display.readAndDispatch()) display.sleep();

       }

   }

}

以下是运行结果:

 

(待续)

Android开发:界面布局的基本使用

问题提出 在android开发中,一个好的程序,除了强大的功能以外,还要有一个能吸引别人眼球的界面。纵观当下流行的诸多Android软件,那些绚丽多彩,美轮美奂的程序界面与手触屏完美结合,给我们...
  • xipiaoyouzi
  • xipiaoyouzi
  • 2013年08月27日 18:11
  • 17588

android界面布局2

现在Android非常疯狂,所以网上关于Android学习的资料如雨后春笋般冒起来,像这些基础的东西更是多如牛毛,我会把用过的东西碰到的困难和怎么解决的记录下来,一来可以供自己复习万一以后又碰到类似的...
  • oTongHua12345
  • oTongHua12345
  • 2013年04月15日 21:26
  • 460

界面布局(2)

RelativeLayout相对布局
  • luojie140
  • luojie140
  • 2015年08月05日 16:19
  • 216

flex布局(二)--实例

你会看到,不管是什么布局,Flex往往都可以几行命令搞定。 我只列出代码,详细的语法解释请查阅《Flex布局教程:语法篇》。我的主要参考资料是Landon Schropp的文章和Solved ...
  • qq_22844483
  • qq_22844483
  • 2016年12月28日 14:28
  • 673

Eclipse通过jdbc连接数据库制作简单登陆界面

做网站开发,要求有多种搭配方式,前台技术可以使用PHP、ASP、JSP、ASP.NET、CGI等任何一种; 需要用到的基础语言用的最多的就是HTML/CSS、JS、JAVA、XML这些了,HTML/...
  • hesi9555
  • hesi9555
  • 2017年04月17日 09:50
  • 6758

从简单实例开始,学会写Makefile(一)

作为一个刚刚从大学囚笼里走出的新人,进公司不久就遇到了一个不大不小的门槛——看不懂Makefile!虽然还不至于影响到项目进度,从别的地方拷贝一份过来稍加修改就可以用了,但是,对于咱们“程序猿”来说这...
  • wcl199274
  • wcl199274
  • 2014年09月08日 22:42
  • 1204

C语言++a与a++的实现机制与操作符结合优先级

华为笔试题 1.写出判断ABCD四个表达式的是否正确, 若正确, 写出经过表达式中 a的值(3分) int a = 4; (A)a += (a++); (B) a += (++a) ;(C) (a+...
  • huqinweI987
  • huqinweI987
  • 2014年04月22日 19:27
  • 5411

shell中>&2的含义及用法

在阅读《Shell脚本学习指南》时,看到这么一段代码 if [ -f "$file" ] && ! [ -w "$file" ] then # $file存在且为一般文件,但不可写入 ...
  • u011598848
  • u011598848
  • 2014年03月21日 14:38
  • 1262

Android五大布局及自定义布局

概念Android的界面是有布局和组件协同完成的,布局好比是建筑里的框架,而组件则相当于建筑里的砖瓦。组件按照布局的要求依次排列,就组成了用户所看见的界面。Android的五大布局分别是LinearL...
  • qq_28147169
  • qq_28147169
  • 2016年06月15日 22:19
  • 160

Ext JS 6开发实例(三) :主界面设计

在上文中,已经将CMD创建的应用程序导入到项目里了,而且也看到默认的主界面了,今天的主要工作就是修改这个主界面,以符合项目的需要。...
  • tianxiaode
  • tianxiaode
  • 2016年05月26日 17:10
  • 10650
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Eclipse界面编写实例(2)--理解布局2
举报原因:
原因补充:

(最多只允许输入30个字)