`

常用的布局管理器

 
阅读更多

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();
		
	}

}
 
分享到:
评论

相关推荐

    iceberg-flink-runtime-1.15-1.1.0.jar

    iceberg-flink-runtime-1.15-1.1.0.jar

    2024-2030中国PID光致电离传感器与探测器市场现状研究分析与发展前景预测报告 Sample.pdf

    QYResearch是全球知名的大型咨询公司,行业涵盖各高科技行业产业链细分市场,横跨如半导体产业链(半导体设备及零部件、半导体材料、集成电路、制造、封测、分立器件、传感器、光电器件)、光伏产业链(设备、硅料/硅片、电池片、组件、辅料支架、逆变器、电站终端)、新能源汽车产业链(动力电池及材料、电驱电控、汽车半导体/电子、整车、充电桩)、通信产业链(通信系统设备、终端设备、电子元器件、射频前端、光模块、4G/5G/6G、宽带、IoT、数字经济、AI)、先进材料产业链(金属材料、高分子材料、陶瓷材料、纳米材料等)、机械制造产业链(数控机床、工程机械、电气机械、3C自动化、工业机器人、激光、工控、无人机)、食品药品、医疗器械、农业等。 邮箱:market@qyresearch.com

    中医药研发风险分担基金申请专家组评审表.docx

    中医药研发风险分担基金申请专家组评审表.docx

    结晶型聚酯树脂,全球前10强生产商排名及市场份额调研数据(by QYResearch).pdf

    QYResearch是全球知名的大型咨询公司,行业涵盖各高科技行业产业链细分市场,横跨如半导体产业链(半导体设备及零部件、半导体材料、集成电路、制造、封测、分立器件、传感器、光电器件)、光伏产业链(设备、硅料/硅片、电池片、组件、辅料支架、逆变器、电站终端)、新能源汽车产业链(动力电池及材料、电驱电控、汽车半导体/电子、整车、充电桩)、通信产业链(通信系统设备、终端设备、电子元器件、射频前端、光模块、4G/5G/6G、宽带、IoT、数字经济、AI)、先进材料产业链(金属材料、高分子材料、陶瓷材料、纳米材料等)、机械制造产业链(数控机床、工程机械、电气机械、3C自动化、工业机器人、激光、工控、无人机)、食品药品、医疗器械、农业等。 邮箱:market@qyresearch.com

    whatcanIsay2_1.cpp

    whatcanIsay2_1.cpp

    校园绿化主要工作管理方案.docx

    校园绿化主要工作管理方案.docx

    C++ 管理系统教程.docx.docx

    c++管理系统 初识 C++ 管理系统 开发环境配置:详细指导如何在各大主流操作系统(Windows、macOS、Linux)上配置 C++ 开发环境,确保读者能顺利开始编码。 项目结构介绍:讲解管理系统基本项目结构的组成部分及其作用,帮助读者理清项目开发思路。 2. 基本功能实现 类和对象:深入讲解 C++ 类和对象的使用,并通过实例展示如何实现用户和管理员的基本管理功能。 文件操作:介绍如何利用 C++ 的文件操作特性来实现数据的持久化存储,确保系统数据在程序关闭后仍能保留。 简单交互界面:通过命令行界面与用户进行交互,使读者初步体验系统功能的实际操作。 3. 进阶功能拓展 错误处理:教授如何进行异常处理,提高系统的稳定性和可靠性,确保程序在异常情况下依然能正常运行。 简单的数据库集成:介绍如何使用 SQLite 实现基本的数据库功能,帮助读者管理和存储用户数据。 图形用户界面(GUI):演示如何使用 Qt 或其他库来构建简易的图形界面,从而提升用户体验。

    学习记录Django学习(图书馆项目)

    在学习过程中跟着网上相关教程练手模仿的图书馆项目(相当简陋)

    利用TensorRT对yolov5s进行加速,并将其应用于ROS,实现交通标志、红绿灯(直接输出路灯状态)、行人和车辆等交通场景

    【作品名称】:利用TensorRT对yolov5s进行加速,并将其应用于ROS,实现交通标志、红绿灯(直接输出路灯状态)、行人和车辆等交通场景 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】:利用TensorRT对yolov5s进行加速,并将其应用于ROS,实现交通标志、红绿灯(直接输出路灯状态)、行人和车辆等交通场景的检测。 在本人的jetson Agx xavier开发板上跑出约19ms~20ms/帧的速度,并可极好的检测目标物体,是配置自动驾驶算法的良好选择。 添加ROS通信 本项目使用自定义消息类型,如下所示: string ClassName int32 conf int32 tl_x int32 tl_y int32 br_x int32 br_y 运行如下操作 #终端1 cd yolov5s_trt_ros catkin_make roslaunch usb_cam usb_cam-test.launch \\运行usb摄像头 #终端2 rosrun yolo_de

    Java版本的P2P-NAT穿透之UDP穿透

    Java版本的P2P-NAT穿透之UDP协议,需要读者了解socket编程,了解一点Netty编程和JavaFx客户端基础知识。如果有不会使用的可以加作者QQ:541655940辅助部署测试和使用

    数字电子时钟课程设计.docx

    数字电子时钟课程设计 数字电子时钟课程设计 一、设计目的 了解和掌握数字电路的基本原理和设计方法,特别是关于时钟电路的设计和应用。 学会使用集成电路和数字电路元件来实现数字电子时钟的功能。 通过实际制作和测试,提高分析问题和解决问题的能力。 二、设计原理 数字电子时钟主要由以下几个部分组成: 振荡器:作为整个系统的时基信号,产生稳定的频率信号。通常使用石英晶体振荡器,因为它具有高精度和稳定性。 分频器:将振荡器产生的高频信号分频为所需的低频信号,例如每秒一次的“秒”信号。 计数器:根据“秒”信号进行计数,实现时、分、秒的计时功能。计数器通常包括秒计数器、分计数器和时计数器。 译码显示电路:将计数器的输出信号转换为可显示的数字信号,并驱动数码管或其他显示设备显示。 校时电路:用于手动调整时间,确保时钟的准确性。 三、设计方案 硬件设计: 选择适当的集成电路元件,如CD4060(14级二进制计数器)和CD4518(双BCD加计数器)来实现分频和计数功能。 设计合适的译码显示

    云卓H12说明书.pdf

    H12说明书

    国家开放大学数据库应用技术第三次形考作业2

    多表连接查询。写出实现如下查询的SQL语句。  (12) 查询选了C002课程的学生的姓名和所在系。  (13) 查询成绩80分以上的学生的姓名、课程号和成绩,并按成绩降序排列结果。  (14) 查询计算机系男生选修了“数据库基础”的学生的姓名和成绩。  (15) 查询学生的选课情况,要求列出每位学生的选课情况(包括未选课的学生),并列出学生的学号、姓名、课程号和考试成绩。  (16) 查询哪些课程没有人选修,要求列出课程号和课程名。  (17) 查询计算机系没有选课的学生,列出学生的姓名。

    Screenshot_20240605_230336.jpg

    Screenshot_20240605_230336.jpg

    ovlmenu.zip

    最新版本,官方正式版本,1.2.3版本。 因GitHub下载较慢,转存于CSDN。 Tesla-Menu是一款专为任天堂Switch自制系统(通常是大气层Atmosphere CFW)设计的悬浮层插件,它极大地增强了系统的便利性和可定制性。以下是关于Tesla-Menu插件的一些核心特点和功能介绍: 悬浮菜单快速访问:Tesla-Menu允许用户通过预设的按键组合(可在配置文件中自定义)在Switch的任何界面快速呼出一个悬浮菜单。这个菜单提供了对各种系统功能和插件的快速访问,无需退出当前应用或游戏。 功能丰富:菜单中集成了多项实用功能,例如开关FPS显示、硬件信息显示、超频设置、快速切换TV模式或掌机模式等。这些功能通常涉及系统调整、性能监控或是快速启动其他插件,为玩家提供了极大的便利。 资源友好:相比一些更复杂的插件或应用,Tesla-Menu被设计得较为精简,尽量减少对系统资源特别是GPU资源的占用。这使得它在掌机模式下表现更为稳定,减少了出错的概率。 高度可配置:用户可以通过编辑配置文件(通常是SD卡上的config/tesla/config.ini)来自定义呼出菜

    Tectia client

    Tectia client

    RPA实战演练UiBot6.0校园学生教评机器人

    校园学生教评机器人,也称为全自动校园教评RPA(Robotic Process Automation,机器人流程自动化)机器人,是一种利用软件机器人技术来模拟和执行学生教评流程中的各项任务和操作的智能化系统。以下是关于校园学生教评机器人的详细介绍: 一、定义与功能 校园学生教评机器人是一种使用预定规则和预定流程来执行重复性、繁琐或规定任务的技术。它可以模拟人类的操作,与学校的教务系统和相关应用程序进行交互,执行学生教评中的各项任务。这些任务包括但不限于: 自动收集和处理学生评教数据:机器人可以从不同的来源(如在线评教系统、学生调查问卷等)自动收集学生评教数据,并进行处理和分析。 自动生成评教报告:根据收集到的数据,机器人可以自动生成评教报告,包括教师评分、学生反馈等关键信息。 自动发送评教通知和报告:机器人可以向相关教师和部门自动发送评教通知和报告,确保评教结果的及时传达。

    2024年印度船用音响系统市场机会及渠道调研报告-样本.docx

    2024年印度船用音响系统市场机会及渠道调研报告-样本

    2024-2030中国波长选择开关模块市场现状研究分析与发展前景预测报告 Sample.pdf

    QYResearch是全球知名的大型咨询公司,行业涵盖各高科技行业产业链细分市场,横跨如半导体产业链(半导体设备及零部件、半导体材料、集成电路、制造、封测、分立器件、传感器、光电器件)、光伏产业链(设备、硅料/硅片、电池片、组件、辅料支架、逆变器、电站终端)、新能源汽车产业链(动力电池及材料、电驱电控、汽车半导体/电子、整车、充电桩)、通信产业链(通信系统设备、终端设备、电子元器件、射频前端、光模块、4G/5G/6G、宽带、IoT、数字经济、AI)、先进材料产业链(金属材料、高分子材料、陶瓷材料、纳米材料等)、机械制造产业链(数控机床、工程机械、电气机械、3C自动化、工业机器人、激光、工控、无人机)、食品药品、医疗器械、农业等。 邮箱:market@qyresearch.com

    2024-2030中国保险评级软件市场现状研究分析与发展前景预测报告 Sample.pdf

    QYResearch是全球知名的大型咨询公司,行业涵盖各高科技行业产业链细分市场,横跨如半导体产业链(半导体设备及零部件、半导体材料、集成电路、制造、封测、分立器件、传感器、光电器件)、光伏产业链(设备、硅料/硅片、电池片、组件、辅料支架、逆变器、电站终端)、新能源汽车产业链(动力电池及材料、电驱电控、汽车半导体/电子、整车、充电桩)、通信产业链(通信系统设备、终端设备、电子元器件、射频前端、光模块、4G/5G/6G、宽带、IoT、数字经济、AI)、先进材料产业链(金属材料、高分子材料、陶瓷材料、纳米材料等)、机械制造产业链(数控机床、工程机械、电气机械、3C自动化、工业机器人、激光、工控、无人机)、食品药品、医疗器械、农业等。 邮箱:market@qyresearch.com

Global site tag (gtag.js) - Google Analytics