`

常用的布局管理器

 
阅读更多

SWT有2种控制控件位置和大小的方法:绝对定位和托管定位。

 

绝对定位是相对于父容器的左上角来说的。它的缺点是,窗口变化时,控件的位置和大小是不变的。

托管定位:只要把控件放到容器里面即可,它们的位置和大小由布局管理器来计算和维护。当窗口发生改变是,管理器会重新计算控件的位置和大小。

package com.test.cxm.plugin01.perspective;


import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FormAttachment;
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.layout.FormLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;

public class HelloWorldSWT {
	
	public static void main(String args[]){
	    Display display=Display.getDefault();
	    Shell shell=new Shell();
	    shell.setBounds(100, 100, 220, 180);
		shell.setText("mmm");
		
		
		//填充布局,部件完全填充其父部件
		//每个小部件都和其它小部件的大小保存一致
		//不能控制部件的间隔、页边距等属性
		//默认为SWT.HORIZONTAL默认为横线排列
		//shell.setLayout(new FillLayout(SWT.VERTICAL))这个为垂直排列
		shell.setLayout(new FillLayout());
		for(int i=0;i<8;i++){
			Button bn=new Button(shell, SWT.PUSH);
			bn.setText("B"+i);
		}
还可以这样:
                FillLayout fill=new FillLayout();
		fill.type=SWT.VIRTUAL;
		fill.marginHeight=10;//上下边框的距离
		fill.marginWidth=30;//左右边框的距离
		fill.spacing=10;//控件间的间隔
		
		shell.setLayout(fill);
		
		
		//行布局
		//和填充布局类似,将小部件以一行或一列的形式放置,还可以控制许多附加属性
		//子部件和父shell间的空白通过marginLeft;marginRigh;marginTop;marginBottom这几个属性设置
		//部件间的距离通过spacing设置
		RowLayout rlay=new RowLayout();
		rlay.marginLeft=5;
		rlay.marginRight=5;
		rlay.marginTop=10;
		rlay.marginBottom=5;
		rlay.spacing=10;
		rlay.wrap=false;//是否自动换行,默认为ture
		rlay.pack=false;//根据控件的内容,调整其大小,默认为true
                b.setLayoutData(new RowData(100,30));//还可以设置某一个控件的长和宽
		shell.setLayout(rlay);
		for(int i=0;i<8;i++){
			Button bn=new Button(shell, SWT.PUSH);
			bn.setText("B"+i);
		}
		
		
		
		//网格布局,是最常用、也是最复杂的布局管理器
		//布局中得每个小部件,都可以通过GridData对象控制
		GridLayout gl=new GridLayout();
		gl.numColumns=2;//定义该布局管理器的列数
		shell.setLayout(gl);
		
		Label label=new Label(shell,SWT.LEFT);
		label.setText("label");
		GridData gd=new GridData();
		gd.horizontalSpan=2;//指定小部件占据的列数,默认为一个单元格
		label.setLayoutData(gd);
		//注意:GridData对象不能重用
		Label label2=new Label(shell,SWT.LEFT);
		label2.setText("name");
		Text text=new Text(shell, SWT.SINGLE|SWT.BORDER);
		GridData gd2=new GridData();
		//horizontalAlignment属性指定小部件的水平对齐方式
		//有SWT.BEGINNING CENTER END FILL
		//FILL指的是让该小部件充满该单元格
		gd2.horizontalAlignment=GridData.FILL;
		//定义是否填充单元格,只有这个属性为true时,上面的属性才能生效
		gd2.grabExcessHorizontalSpace=true;
		text.setLayoutData(gd2);

               // horizontalAlignment是水平对齐方式,相应的还有verticalAligment垂直对齐方式
              //horizontalIndent水平缩进,verticalIndent垂直缩进
              //horizontalSpan跨列显示,verticalSpan跨行显示
              
		
		
		
		/**
		 * 表单布局
		 * 它是eclipse中最为强大的布局
		 * 通过它可以独立控制部件的四周,顶部、底部、左侧、右侧
		 * 
		 * 上下都是参考上边框,左右都是参考左边框
		 * 正值表示向下和向右偏移的像素点,负的表示向上和向左
		 * FormData是最重要的对象,它具有四个FormAtttachment对象
		 * 每一个对应一个边框
		 * 
		 */
		
		shell.setLayout(new FormLayout());
		Button bn=new Button(shell, SWT.PUSH);
		bn.setText("Cancel");
		//默认没有参数,可以带参数,表示组件新的宽度和高度
		//new FormData(100,50)
		FormData fm=new FormData();
		fm.right=new FormAttachment(100,-5);
		fm.bottom=new FormAttachment(100,-5);
		bn.setLayoutData(fm);
		
		Button bn2=new Button(shell, SWT.PUSH);
		bn2.setText("ok");
		FormData fm2=new FormData();
		//可以有第3个参数,这个参数时可选的
		//虽然指定了组件,但是以该组件的那个地方为标准偏移的
		//可以取得值为:LEFT,RIGHT,CENTER,TOP,BUTTON,DEFAULT
		fm2.right=new FormAttachment(bn,-5,SWT.CENTER);
		fm2.bottom=new FormAttachment(100,-5);
		bn2.setLayoutData(fm2);
		
		Text tx=new Text(shell, SWT.MULTI|SWT.BORDER);
		FormData tfm=new FormData();
		tfm.top=new FormAttachment(0,5);
		tfm.bottom=new FormAttachment(bn,-5);
		tfm.left=new FormAttachment(0,5);
		tfm.right=new FormAttachment(100,-5);
		tx.setLayoutData(tfm);
               堆栈式布局管理器,就像迭起的扑克牌,只会显示最上面的那个控件
               	final Composite comp1=new Composite(shell, SWT.BORDER);
		final StackLayout st=new StackLayout();
		comp1.setLayout(st);
		
		final Button bt1=new Button(comp1,SWT.RADIO);
		final Button bt2=new Button(comp1,SWT.CHECK);
		bt1.setText("radio");
		bt2.setText("check");
		
		final Composite comp2=new Composite(shell, SWT.BORDER);
		comp2.setLayout(new RowLayout());
		Button bt3=new Button(comp2, SWT.NONE);
		bt3.setText("Radio");
		bt3.addSelectionListener(new SelectionAdapter() {
			public void widgetSelected(SelectionEvent e){
				st.topControl=bt1;
				comp1.layout();
			}
		});
		
		Button bt4=new Button(comp2, SWT.NONE);
		bt4.setText("Check");
		bt4.addSelectionListener(new SelectionAdapter() {
			public void widgetSelected(SelectionEvent e){
				st.topControl=bt2;
				comp1.layout();
			}
		});
		
		
		
		
		shell.open();
		while(!shell.isDisposed()){
			if(!display.readAndDispatch()){
				display.sleep();
			}
		}
		display.dispose();
		
	}

}
 
分享到:
评论

相关推荐

    java 常用布局管理器

    ### Java常用布局管理器详解 在Java图形用户界面(GUI)设计中,布局管理器扮演着至关重要的角色。它们负责组织和排列容器内的组件,确保界面不仅美观,而且响应式,能够在不同屏幕尺寸和设备上正常工作。本文将深入...

    java图形界面编程之常用组件、布局管理器

    韩顺平java图形界面编程之常用组件、布局管理器

    Swing布局管理器

    1. **BorderLayout**:这是一种非常常用的布局管理器,它将容器划分为五个区域:北、南、东、西和中心。向容器添加组件时,需要指定将其放置在哪个区域。这种布局非常适合于构建具有固定边栏或顶部/底部导航栏的界面...

    swt 布局管理器 java中应用

    GridLayout是最常用的布局管理器之一,它将父组件划分为一个二维网格,子组件可以占据一个或多个单元格。GridLayout通过`numColumns`属性确定网格的列数,同时通过`makeColumnsEqualWidth`属性可以控制所有列是否...

    安卓布局管理器

    ### 安卓布局管理器 #### 核心概念 在深入掌握Android布局知识之前,我们首先需要了解Android平台下的控件类基础。整个Android的布局和控件体系构建在几个核心类上,其中最基础的是`View`和`ViewGroup`。 **View...

    三,android编码规范 & 常用布局 & 常用控件

    接下来,我们关注Android的常用布局管理器。布局管理器是控制UI元素在屏幕上的排列方式的关键。主要有以下几种: 1. **线性布局(LinearLayout)**:支持水平或垂直方向上的单行或单列排列,通过`orientation`属性...

    谈谈Java中的布局管理器.pdf

    流布局管理器(FlowLayout)是一种常用的布局管理器,将组件逐行定位,行内从左到右,一行排满后换行,默认对齐方式为居中对齐,不改变组件的大小,按组件原有尺寸显示组件。 边界布局管理器(BorderLayout)将整个...

    android studio之布局管理器之间的互相嵌套.docx

    RelativeLayout 是 Android 中最常用的布局管理器之一,它可以根据相对位置安排 UI 组件。它有很多的布局参数,如 android:layout_width、android:layout_height、android:layout_marginLeft 等,可以控制组件的...

    第18讲 布局管理器.ppt

    本讲主要探讨了五种常用的布局管理器:FlowLayout、BorderLayout、CardLayout、GridLayout以及GridBagLayout。 1. FlowLayout:流式布局管理器是Java中最基础的布局管理器,也是Panel和Applet类的默认布局。它按照...

    Java中Swing,IO,Thread,线程使用教程

    Swing 提供的常用布局管理器包括流布局管理器、边界布局管理器和网格布局管理器。 FlowLayout 流布局管理器是面板的默认布局管理器,它的行为跟文书处理程序的版面配置方式差不多,每个组件都会依照理想的大小呈现...

    MFC布局管理,模仿Winform布局控件

    MFC中默认的布局管理器包括CLayoutView、CFormView和CDialog等,它们通常依赖于窗口的尺寸改变消息来调整控件的位置和大小。然而,这些默认的布局管理方式可能无法满足复杂或精细的界面设计需求,尤其是在需要类似...

    实验二 布局管理器及简单控件的使用

    在Android应用开发中,布局管理器(Layout Manager)与简单控件是构建用户界面的核心元素。本实验将深入探讨如何有效利用布局管理器来组织UI元素,并熟练掌握常见简单控件的使用。以下是对这些主题的详细阐述: 一...

    java FlowLayout布局管理

    Java中的`FlowLayout`布局管理器是窗口小部件(如按钮、文本框等)在容器(如JFrame或JPanel)中自动排列的基础工具。它按照从左到右、从上到下的顺序放置组件,一旦一行填满,就会开始新的一行。这种布局常用于创建...

    Android学习笔记13:表格布局管理器TableLayout

    在Android开发中,表格布局管理器(TableLayout)是一种常用且强大的组件,它允许开发者创建类似于HTML中的表格的布局。TableLayout是LinearLayout的扩展,它通过行和列的方式来组织子视图(Views)。本篇学习笔记将...

    Android各控件及界面布局介绍

    ##### 常用布局管理器: 1. **LinearLayout**:线性布局,可以按垂直或水平顺序排列子元素。 2. **RelativeLayout**:相对布局,通过定义子元素之间的相对位置进行布局。 3. **ConstraintLayout**:约束布局,提供...

    图形用户界面基础

    对图形用户界面的设计, 实验目的 1. 掌握常用GUI控制组件的使用方法。 2. 掌握事件处理的方法。 3.了解swing控件的概念。

    基于JAVA AWT组件的留言板的设计及实现.pdf

    Java AWT中的常用布局管理器包括: - 流式布局(FlowLayout):将组件按加入顺序依次排列,每行从左到右,满行后换行,组件按原始大小显示。 - 边界布局(BorderLayout):将容器分为五个区域(东、南、西、北、中)...

    MFC 控件自动布局

    这个主题通常包括了对布局管理器的理解和使用,以及如何通过源码和示例来实现这一功能。 MFC中的控件自动布局主要依赖于两种布局管理器:CLayoutView和CFormView。CLayoutView是MFC库中提供的一种布局视图类,它...

    Java GUI布局管理方法探讨.pdf

    本文主要介绍了三种常用的布局管理策略:使用布局管理器、空布局以及自定义布局管理器。 1. 使用Java提供的布局管理器类 Java提供了一系列内置的布局管理器,帮助开发者方便地布局组件: a. FlowLayout(流布局...

Global site tag (gtag.js) - Google Analytics