`
hqs7636
  • 浏览: 221159 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

SWT布局

阅读更多
另外参见:http://java.chinaitlab.com/tools/739720.html


对于Window编程来说, 我们一般不会涉及到布局这个概念,因为基本上我们都是直接设置控件的大小, 位置等布局信息, 但是对于java来说就不一样了, 它涉及到跨平台的问题, 控件的位置和大小不是由它本身来控制的,因此我们不会看到控件有x, y, width, height等属性,而必须通过外面LayoutData和Layout来控制控件的位置和大小,这个是使用Java进行客户端编程必须转变的一个观念,当然这个也不是绝对,后面我们也会看到不使用布局的做法,但是我们一般不提倡这样做

Layout可以理解为它是控件和其所在容器之间的一层抽象, 它决定了控件在容器中的位置, 而且它是与平台无关的, 它会根据容器大小的变动来调整控件的尺寸.而且容器只能设置一种布局方式, 其包含的控件的布局是不依赖其他容器的

首先要介绍的是FillLayout, 它是所有布局中最简单的一种, 使用了该布局的容器中的所有控件将以同一尺寸放在一行或者一列中, 它有一个type属性,用来指定布局是采用列排列还行排列, type的属性值为SWT.HORIZONTAL和SWT_VERTICAL, 默认情况下是行排列, 因为这个type是一个int常量,如果这个常量既不是水平也不是垂直的话,他们系统将默认是垂直排列

接下来是RowLayout,跟FillLayout比较类似,都是按行或列排列包含在容器中的控件, 唯一不同的就是不会限制所有的控件采用同一大小, 而且如果一行或一列排列不下时会自动换行或者换列, 在使用RowLayout的时候,还会用到RowData类, 容器中的控件将通过它来制定自己的大小, RowLayout将根据每个控件的RowData信息来决定控件在整个容器中放置的位置, RowData可以直接在构造函数中通过width和height参数设置,也可以将width和height包装成Point对象作为其构造参数来设置其大小, RowLayout除了有一个跟FillLayout一样的type属性之外,还有另外几个属性需要介绍一下:

justify属性为true表示位于同一列或者同一行中的控件之间的间距相等;

marginBottom(Left, Right, Top)设置边距;

space指定间距;

wrap指定是否换行;

所有的布局都可以通过GridLayout来实现, 它也是我们用的最多的布局, 它采用表格的形式来放置容器所包含的控件, numColumns是该布局最重要的属性, 他决定了布局的结构, 所有的控件将从左到右被放在容器中, 它还有一些其他的属性:

horizontal(vertical)Spacing指定相邻单元格间距;
makeColumnsEqualWidth 是否强制同宽;
marginHeight(Width, Top, Bottom)设置指定边距;

我们还可以结合给控件指定GridData来进行布局, 但是GridData不能在控件之间公用, 它的一些属性必须说明:

grabExcessHorizontal(Vertical)Space为true的意思是指定控件所在单元格将获取所在行(列)剩余的所有空间, 如果一行(列)有多个控件设定该属性为true则只有第一个设置有效, 注意这里只的是cell并不是控件;

height(width)Hint设置控件的最小高(宽),注意这里指的是控件而不是单元格;

horizontal(vertical)Alignment:这个属性用来设置控件在单元格中的对其方式,有

BEGINNING(左对齐),CENTER(居中),END(右对齐),FILL(填满整个单元格)几个值;

horizontal(vertical)Indent:这个是用来水平(垂直)方向上设置控件到单元格之间的间隔;

horizontal(vertical)Span:是用来指定控件在水平(垂直)方向上所占用的单元格;


GridData还有一些常量需要解释一下,BEGINNING,CENTER,END,FILL是用来设置对其方式的,不能作为构造函数的 style参数, FILL_BOTH相当于将horizontalAlignment,

verticalAlignment设置为FILL加上grabExcessHorizontalSpace和 grabExcessVerticalSpace设置为true, 也就是说在构造函数的style参数设置为该值相当于设置了4个属性;

FILL_HORIZONTAL = (horizontalAlignment = FILL) + grabExcessHorizontalSpace=true);
FILL_VERTICAL = (verticalAlignment = FILL) + (grabExcessVerticalSpace=true); GRAB_HORIZONTAL = (grabExcessHorizontalSpace =true);
GRAB_VERTICAL = (grabExcessVerticalSpace =true),

类似HORIZONTAL_ALIGN_BEGINNING这样的从字面都可以知道意思了

FormLayout是所有布局里面最复杂的一种, 它也使用到自己的LayoutData:FormData, 另外它还会在FormData中通过使用FromAttachment来控制关联控件的位置, FormData可以设置四个FormAttachment实例,分别表示控件的四边与相对控件之间的位置关系,

FormAttachment有以下几个成员变量:

alignment 用来指定关联的控件的某个边和相对控件之间的对齐方式,

如果关联的是上下位置,那么可以设置SWT.TOP, SWT.CENTER, SWT.BOTTOM,
是左右位置可以设置SWT.LEFT, SWT.CENTER, and SWT.RIGHT, 该属性一般在指定的相对控件不是容器的时候使用, 否则会没有效果;

control属性指的是相对哪个控件,默认情况下是指的关联控件所在的容器;
denominator 是分母默认是100,这个一般不设置;
numerator是分子, 这两个值在control是关联对象的容器的时候才有意义, 用来指定应用的控件到容器关联边在整个容器中的百分比,说白了就是相对位置;

offset是偏移量,说白了就是关联控件与相对控件指定边之间的绝对位置

从FormAttachment的构造函数我们就可以看出来,一般哪些属性是一起设置的, 比如只设置control, 同时设置control和offset, 同时设置control, offset和alignment, 只设置分母, 同时设置分母和分子, 同时设置分母分子和偏移量

StackLayout是一个用的很少的布局, 从字面意思我们可以看出来, 它是将使用该布局的容器内的所有控件位置,大小设置为相同, 然后层叠在一起,只有位于最上面控件可见, 它使用topControl来指定哪个控件位于堆栈最上层并可见, 如果设置为null表示所有控件均不可见, 设置之后并调用容器的layout()方法才能使指定的控件可见

如何自定义布局

通过学习如何自定义布局,可以对SWT的布局实现做深层次的理解

自定义布局需要继承Layout类,并实现compluteSize和layout方法, 关联控件会调用compluteSize方法根据当前控件所包含子控件的大小计算出一个最小的尺寸值,返回值是Point里面的就是高宽值,就是确定要布局的容器的作用范围,

而调用layout方法则是为容器中的每一个控件通过调用其setBounds方法来设置位置和大小, 如果需要更多的信息来帮助对控件进行布局,那么可以自己顶一个类来封装这些信息然后通过setLayoutData设置给control.


不使用布局

如果你不要面对垮平台,以及根据布局自动调整容器中的控件,那么也可以不通过布局来确定控件的位置和大小,通过自定义我们知道,布局都是通过调用里面控件的setBounds方法来确定控件的位置的,所以我们要做的就是直接调用控件的setBunds方法而已.



。。。。。。。
分享到:
评论

相关推荐

    swt 布局管理器 java中应用

    ### SWT布局管理器在Java中的应用详解 在Java的图形用户界面(GUI)开发领域,Swing和SWT是两个广泛使用的框架。Swing是Java的一部分,而SWT(Standard Widget Toolkit)则是Eclipse项目的一部分,专门针对原生操作...

    swt布局.doc

    SWT布局是开发Java应用程序时使用SWT(Standard Widget Toolkit)框架进行用户界面设计的关键部分。布局管理器决定了窗口组件(如按钮、文本框等)在容器(如Composite)内的排列方式和尺寸。本文将详细介绍SWT布局...

    SWT开发布局(讲解Eclipse的开发插件)

    【SWT布局详解:Eclipse开发插件使用】 在Java平台上,SWT(Standard Widget Toolkit)是一种用于构建图形用户界面(GUI)的库,它是Eclipse IDE中的核心组成部分。SWT提供了一系列的基础控件和布局管理器,使得...

    Eclipse开发经典教程:SWT布局

    Eclipse开发经典教程,SWT中采用了布局方式,用户可使用布局来控制组件中元素的位置和大小等信息。

    swt整合布局

    应用SWT布局。标签器 数据同步 刷新数据

    swt网页布局介绍Layout

    在SWT中,布局(Layout)扮演着至关重要的角色,它负责控制控件的排列方式和大小,确保界面在不同屏幕尺寸和分辨率下都能有良好的显示效果。 布局管理器主要有以下几种: 1. **FillLayout**:填充布局是最简单的...

    swt layout

    以下是关于SWT布局管理器的详细解释: 1. **FillLayout**: - FillLayout是最简单的布局管理器之一,它将所有子组件以相同的大小填充到父组件中。子组件通常会以一行或一列的形式排列。 - FillLayout有两种风格:...

    SWT开发教程1

    4. SWT布局管理: SWT提供了多种布局管理器,如FillLayout、GridLayout、FormLayout等,它们决定了组件在容器中的排列方式。通过合理地使用布局管理器,开发者可以创建出适应不同屏幕尺寸和分辨率的界面。 5. SWT...

    Java swt完整教程

    4. SWT布局管理 SWT提供了几种布局管理器,如FillLayout、GridLayout、FormLayout等,用于控制组件在容器中的排列方式和大小调整。 5. SWT与JFace JFace是建立在SWT之上的抽象层,简化了SWT的使用,提供了一些...

    SWT教程java开发文档

    ### SWT布局管理 - 使用`setLayout`方法设置布局管理器,如`shell.setLayout(new GridLayout(2, false));` - 不同布局管理器有不同的配置参数,例如`GridLayout`的列数和是否填满空间。 ### SWT教程资源 这个...

    swt 监控代码资料

    9. SWT布局管理:SWT提供了几种布局管理器,如FillLayout、GridLayout、FormLayout等,用于控制组件在容器中的排列方式。正确使用布局管理器可以确保界面在不同分辨率和屏幕尺寸下都能良好显示。 10. SWT国际化与...

    SWT 中嵌入Word 控件应用

    9. **SWT布局管理**:为了在SWT界面中合理展示Word控件,需要理解并运用SWT的布局管理器,如`FillLayout`、`GridLayout`等。 通过以上步骤,可以将Word控件无缝集成到SWT应用中,提供一个完整的、原生感觉的文档...

    关于swing和swt的小练习

    8. ** SWT布局**:SWT的布局管理器包括GridLayout、RowLayout和FillLayout等,它们与Swing的布局管理器工作方式相似,但具体细节和使用方式有所不同。 9. **SWT与Eclipse IDE**:由于SWT是Eclipse的基础,因此如果...

    SWT基础代码涵盖其所有控件

    2. SWT布局管理 SWT支持多种布局管理器,如FillLayout、GridLayout、RowLayout和 MigLayout等。布局管理器决定了控件在窗口中的排列方式,例如FillLayout使控件充满容器,GridLayout将控件按行和列分布,RowLayout...

    swt实现的日历附带说明使用

    4. **布局管理**:因为JDatePicker是Swing组件,所以需要考虑如何在SWT布局中正确地显示它。这可能需要用到SWT与Swing之间的桥接类,如`SWT_AWT`,或者使用嵌套的`Composite`和自定义的布局管理器。 5. **界面集成*...

    swt 停靠隐藏

    这将帮助你加深对SWT布局管理和事件处理机制的理解。 通过这种方式,开发者可以在SWT环境中创建出类似QQ那样的停靠隐藏功能,为用户提供更加友好和个性化的交互体验。掌握这些知识对于进行SWT GUI编程非常有帮助,...

    SWT桌面程序开发实例图解教程

    - **SWT布局管理**:SWT提供了多种布局管理器来帮助开发者管理组件的位置和大小。 - **FillLayout**:使所有控件填满容器。 - **GridLayout**:将容器划分为网格,每个网格可以放置一个控件。 - **RowLayout**:...

    SWT教程

    SWT布局管理** SWT提供了多种布局管理器,如FillLayout、GridLayout、RowLayout和 MigLayout等,用于控制窗口中的控件布局。通过组合使用这些布局,开发者可以创建复杂且灵活的界面设计。 **4. SWT事件处理** ...

    Java程序设计之swt教程.rar

    5. SWT布局管理: SWT提供了多种布局管理器,如FillLayout、GridLayout、RowLayout和 MigLayout,帮助开发者有效地安排控件的位置和大小。 6. JFace与SWT的关系: JFace是建立在SWT之上的抽象层,它简化了SWT的...

    swt&jface api

    2. 布局管理:讲解了如何使用FillLayout、GridLayout、RowLayout等SWT布局管理器来控制窗口中控件的排列方式。 3. JFace数据绑定:解释了如何使用JFace的数据绑定框架将数据模型与界面控件关联,实现数据的自动同步...

Global site tag (gtag.js) - Google Analytics