一 四种常用布局介绍:
swt 有4种比较常用的布局,分别为:FillLayout,RowLayout,GridLayout,Formlayout.下面我们依次介绍下它们:
1.FillLayout:是填充布局,它会让里面的子控件以填充的方式进行布局。
FillLayout fl=new FillLayout(); fl.type=SWT.VERTICAL; shell.setLayout(fl); for(int i=0;i<5;i++){ Button button=new Button(shell,SWT.NONE); button.setText("button"+i); }
FillLayout属性:
(1)type:就是指定是水平布局还是垂直布局(SWT.VERTICAL,SWT.HORIZONTAL)。
(2)marginHeight 和marginWidth: 这一个是指定上下边框的长度,一个是指定左右边框的长度。
(3)spacing:指定控件之间的间距长度
2.RowLayout:
RowLayout rl=new RowLayout(); shell.setLayout(rl); for(int i=0;i<5;i++){ Button button=new Button(shell,SWT.NONE); button.setText("button"+i); }
RowLayout属性:
(1)type:就是指定是水平布局还是垂直布局(SWT.VERTICAL,SWT.HORIZONTAL)。
(2)marginHeight 和marginWidth: 这一个是指定上下边框的长度,一个是指定左右边框的长度。
(3)spacing:指定控件之间的间距长度
(4)wrap:指定子控件到边界是否换行,true换行,false不换行,默认是true
(5)pack:true的话指定子控件用自己自适应的大小,false的话指定子控件用相同的大小,高用最大的子控件的高,宽用最宽子控件的宽
(6)fill:指定子控件是否用相同的高在水平布局中,或者是否使用相同的宽在垂直布局中
(7)center:指定子空间是否在水平布局中垂直居中,或者是否在垂直布局中水平居中
(8)justufy:是否边界末尾的子控件,充满剩余空间
(9) marginTop,marginBottom,marginLeft,marginRight:细分上下左右的边框
子控件也可以通过设置RowData,来设置子控件自身的大小,其最终大小会与pack和fill属性相结合
(其实FillLayout 也有对应的FillData 但是这个类是default的,不允许发开者实列化)
3.GridLayout:假如说前面2种布局只能完成某些特定布局的,GridLayout基本上能完成所有布局
GridLayout layout = new GridLayout(); layout.numColumns = 3; shell.setLayout(layout); for(int i=0;i<5;i++){ Button button = new Button(shell,SWT.PUSH); button.setText("Button"+i); }
GridLayout属性:
(1)numColumns:指定一行内能放多少子控件,默认是1
(2)makeColumsEqualWidth: 指定子空间是否用相同的宽度
(3)marginHeight 和marginWidth: 这一个是指定上下边框的长度,一个是指定左右边框的长度。
(4) marginTop,marginBottom,marginLeft,marginRight:分子细分上下左右的边框
(5)horizontalSpacing,verticalSpacing:水平间距和垂直间距
相对于前面2种布局,GridLayout布局的GridData属性就比较重要,下面我们来介绍下GridData:
(1)verticalAlignment:指定子控件垂直对齐方式 (SWT.BEGINNING,SWT.CENTER,SWT.END,SWT.FILL)
(2)horizontalAlignment:指定子控件水平对齐方式 (SWT.BEGINNING,SWT.CENTER,SWT.END,SWT.FILL)
(3)widthHint:指定子控件的最小宽度,默认是-1 (使用自适应宽度)
(4)heightHint:指定子控件的最小长度, 默认是-1 (使用自适应高度)
(5)horizontalIndent:指定子控件在原来的基础位置上水平缩进。
(6)verticalIndent:指定子控件在原来的基础位置上垂直缩进。
(7)horizontalSpan:指定子控件水平占几格
(8)verticalSpan:指定子控件垂直占几格
(9)grabExcessHorizontalSpace:指定子控件是否跟着父控件的宽度变化进行相应充满
(10)grabExcessVerticalSpace:指定子控件是否跟着父控件的高度变化进行相应充满
(11)minimumWidth:指定子控件最小宽度,仅在grabExcessHorizontalSpace=true时有用
(12)minimumHeight:指定子控件最小高度,仅在grabExcessVerticalSpace=true时有用
(13)exclude:如果为true, 子控件的大小和位置不会被布局控制,如果为false,子控件的大小和位置会被布局控制和设计
下面实现一个比较复杂的例子:
GridLayout layout = new GridLayout(); layout.numColumns = 2; shell.setLayout(layout); Text text = new Text(shell,SWT.MULTI | SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL); GridData gd=new GridData(GridData.FILL_BOTH); gd.horizontalSpan=2; text.setLayoutData(gd); Button okButton = new Button(shell,SWT.PUSH); okButton.setText("OK"); gd=new GridData(); gd.horizontalAlignment=SWT.END; gd.grabExcessHorizontalSpace=true; okButton.setLayoutData(gd); Button cancelButton = new Button(shell,SWT.PUSH); cancelButton.setText("Cancel"); gd=new GridData(); gd.horizontalAlignment=SWT.END; gd.grabExcessHorizontalSpace=true; okButton.setLayoutData(gd);
同样配上效果图:
4.FormLayout:假如说GridLayout 还有什么做不到的,在我实际应用当中发现只有控件重叠做不到了,而FormLayout 不仅能实现GridLayout所有实现,而且还能使空间重叠,下面我们来 用FormLayout来实现上面GridLayout复杂的例子:
FormLayout layout = new FormLayout(); shell.setLayout(layout); Button cancelButton = new Button(shell,SWT.PUSH); cancelButton.setText("Cancel"); FormData formData1 = new FormData(); formData1.right = new FormAttachment(100,-5); //第一个数字式百分比,也就是说 【宽度-5】 formData1.bottom = new FormAttachment(100,-5); //第一个数字式百分比,也就是说 【高度-5】 cancelButton.setLayoutData(formData1); Button okButton = new Button(shell,SWT.PUSH); okButton.setText("OK"); FormData formData2 = new FormData(); formData2.right = new FormAttachment(cancelButton,-5); formData2.bottom = new FormAttachment(100,-5); okButton.setLayoutData(formData2); Text text = new Text(shell,SWT.MULTI | SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL); FormData formData3 = new FormData(); formData3.top = new FormAttachment(0,5); formData3.bottom = new FormAttachment(cancelButton,-5);//底部距离 【底部控件-5个像素】 formData3.left = new FormAttachment(0,5); formData3.right = new FormAttachment(100,-5); text.setLayoutData(formData3); Color color = new Color(null,255,0,0); text.setForeground(color);
从上面的代码我们可以看出,其实FormLayout布局中最关键的就是FormAttachment类,下面我们就来介绍下这个类:
(1) numerator 和denominator:中文意思分子和分母,顾名思义是指子控件上下左右的边界在整个父控件中占在几分之几的位置,假设是10分之一的话,父控件假如是100px宽度,其边界就在10px处。
(2)offset:就是根据分子分母的比率的位置,在偏移相应的量。
(3)control:子控件根据其他子控件布局
(4)alignment:根据其他控件选择与其对齐方式,SWT.TOP,SWT.BOTTOM and SWT.CENTER 只能用在 top和bottom attachments中,LEFT, RIGHT and CENTER 被用在 right 和left attachments中
参考资料:
http://www.eclipse.org/articles/article.php?file=Article-Understanding-Layouts/index.html
相关推荐
在SWT中,布局(Layout)扮演着至关重要的角色,它负责控制控件的排列方式和大小,确保界面在不同屏幕尺寸和分辨率下都能有良好的显示效果。 布局管理器主要有以下几种: 1. **FillLayout**:填充布局是最简单的...
3. 对子组件设置布局数据,这可能涉及到`LayoutData`对象的使用,以便于布局管理器正确地定位和调整子组件的大小。 通过以上布局管理器,开发者可以创建出各种符合需求的用户界面。在实际编程中,选择合适的布局...
首先,SWT布局的核心是抽象类`Layout`的子类。布局的主要作用是控制Composite的子组件的位置和大小。当创建一个用户界面时,如果不指定布局,子组件可能会默认为零大小,导致不可见。因此,合理使用布局是创建有效...
import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; public class HelloSWT { public static void main(String[] args) { Display display = new Display(); Shell shell = new...
下面将详细介绍如何利用SWT的Layout布局机制来设计和优化Table组件的显示效果。 ### Layout布局机制 SWT提供了多种Layout类,包括FillLayout、GridLayout、RowLayout、FormLayout等,每种布局都有其适用场景。在...
4. **Layout**: SWT提供了一套布局管理器,如FillLayout、GridLayout、RowLayout和 MigLayout,用于控制Shell和Composite中Widget的排列和大小。 5. **Event和Listener**: SWT事件模型基于事件和监听器。事件是用户...
`org.eclipse.swt.layout.GridLayout`和`org.eclipse.swt.layout.FillLayout`等布局管理器可以帮助开发者更好地组织和排列控件。 SWT的一大特点是其性能高效,因为它直接与操作系统底层交互,避免了Java AWT和Swing...
- **org.eclipse.swt.layout**: 提供了多种布局管理器。 - **org.eclipse.swt.graphics**: 包含了用于绘图的类和接口。 - **org.eclipse.swt.events**: 定义了事件处理相关的类和接口。 #### 4. SWT实例编程 SWT...
- **org.eclipse.swt.layout**:提供布局管理器类。 - **org.eclipse.swt.graphics**:图形处理相关的类。 #### 4. SWT实例编程 SWT提供了广泛的组件供开发者选择。下面是一些常见的组件示例: - **Button组件**...
4. **Layout**: Layout管理Shell或Composite内的Widget布局,如FlowLayout、GridLayout、 MigLayout等,确保界面在不同屏幕尺寸下保持良好的显示效果。 ### SWT的主要特点 1. **原生性能**: SWT直接使用操作系统...
GoupLayout是SWT中的一个布局管理器,用于帮助开发者组织和控制控件在窗口或对话框中的布局。在SWT-Grouplayout.jar这个文件中,包含了实现GroupLayout功能所需的类和方法。 SWT是Eclipse项目的一部分,它通过提供...
2. **布局管理**:在SWT中,布局(Layout)用于控制组件在父容器中的排列方式。常见的布局有填充分布(FillLayout)、网格布局(GridLayout)、单列表布局(RowLayout)和自由布局(FormLayout)等。 3. **事件处理...
2. SWT组件:SWT包含各种常见的GUI组件,如按钮(Button)、文本框(Text)、滚动条(Scrollbar)、列表(List)、树(Tree)等,以及布局管理器如FillLayout、GridLayout、 MigLayout等,用于控制组件的排列和大小。...
它由一系列的类和接口组成,包括控件(Widget)、布局(Layout)和事件(Event)等核心概念。 2. **控件(Widgets)** SWT中的控件是GUI的基本构建块,包括按钮、文本框、列表、树、菜单等。每个控件都有特定的...
5. **布局管理**:SWT提供了多种布局管理器,如`GridLayout`、`FillLayout`、`RowLayout`等,它们用于决定控件在Shell中的排列方式。通过`setLayout`方法设置Shell或控件的布局。 6. **运行和调试**:在Eclipse中,...
在SWT(Standard Widget Toolkit)框架中,FormLayout是一种非常灵活且强大的布局管理器,主要用于控制组件在容器中的位置和大小。它允许开发者通过精确指定组件的边界来实现复杂的用户界面设计。FormLayout非常适合...
- **Layout**: Layout管理器负责控制Composite中的子Widget如何在界面上排列和布局,例如填充、网格、单列等布局方式。 2. **SWT的主要组件**: - **Button**: 用于创建按钮,如`PushButton`和`ToggleButton`。 ...
1. 布局(Layout):SWT提供多种布局管理器,如填充布局(FillLayout)、网格布局(GridLayout)、卡片布局(CardLayout)和堆叠布局(StackLayout),帮助控制组件在容器内的排列和大小。 2. 自定义布局:如果预设...
4. **布局(Layout)** - **填充布局(FillLayout)**:使控件充满容器空间。 - **网格布局(GridLayout)**:将控件按网格布局排列。 - **单列布局(StackLayout)**:只显示一个控件,通过切换显示不同的控件。 - **...