本篇主要介绍如何在SWT下构建一个应用,如何安装SWT Designer并破解已进行SWT的可视化编程,Display以及Shell为何物、有何用,SWT中的常用组件、面板容器以及事件模型等。
1.可视化环境搭建(SWT Designer):
(1).首先下载SWT Designer插件包SWT Designer 6.9.5 for Eclipse.rar;
(2).将解压好的插件包extplugins\swt\eclipse下的features和plugins导入Myeclipse的dropins文件夹下
SWT Designer 6.9.5 for Eclipse.rar:
Myeclipse的dropins:
(3).下载个注册机,激活全部可视化编程控件的使用(否则只能使用部分控件)
2.Display和Shell
编写swt程序的步骤,这些步骤是:
(1). 创建一个Display对象
(2). 创建一个或者多个Shell对象,你可以认为Shell代表了程序的窗口。
(3). 在Shell内创建各种部件(widget)
(4). 对各个部件进行初始化(外观,状态等),同时为各种部件的事件创建监听器(listener)
(5). 调用Shell对象的open()方法以显示窗体
(6). 各种事件进行监听并处理,直到程序发出退出消息
(7). 调用Display对象的dispose()方法以结束程序。
举例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
public class TestText {
|
Display是SWT的基础类,负责在应用程序和本地操作系统之间建立交互;
一般一个应用程序只要一个Display即可,其用于启动一个专有的线程,将执行事件循环,并且保持UI线程。
常用方法:getShells、getPrimaryMonitor等。
Shell是显示在桌面上的窗口。可以是顶级窗口或是对话框。
样式的调整通过构造函数进行设置,比如:Shell shell = new Shell(display, SWT.CLOSE)设置成只显示关闭标志的Shell窗口。
如果要使用多个样式,则需要可以使用“|”运算符进行叠加。
shell的继承关系:
一个应用程序中可以创建一个或多个Shell
3.基本组件介绍
Widget:窗口小部件,Widget类是各种用户界面元素如按钮、列表、数和菜单整个继承体系的父类,抽象类
Controls和Composites:在SWT中,操作系统控件被定义为抽象类Control的子类,如Button类,Text类等都是Control的子类。
每个控件都会有自己的父部件,这个父部件可以是Composite类或它的子类,shell也是Composite的子类。
SWT中控件体系的继承关系为:
Button:Button分为普通按钮(SWT.PUSH)、单选按钮(SWT.RADIO)、多选按钮(SWT.CHECK)、箭头按钮(SWT.ARROW)和切换按钮(SWT.TOGGLE)
其样式包括居中、居左等。
常用方法:setText、getSelect等
Label:分为文本标签(SWT.NONE)、分割线标签(SWT.SEPARATOR)
Text(文本框):单行、多行、包裹
其方法有:选中所有字符selectAll、显示设置的选取文本showSelection、取消所有选择clearSelection、将选取的字符串复制到剪贴板copy等
List(列表框):SWT.SINGLE(默认只能选中一个)、SWT.MULTI(可以选择多行)
其方法有:添加选项add(String string)、remove(int index)删除选项
Combo(组合框):下拉框
4.面板容器类
Composite(面板类):composite类继承关系
Group(分组框):分组框是能够显示标题分组的面板类
TabFolder(选项卡):一个TabFolder与多个TabItem进行对应
常用方法:获得选项卡数组getItems()、获得当前选中的选项卡getSelection()等
CTabFolder(自定义选项卡):功能与TabFolder类似,但是样式更加丰富,如:
1 | final CTabFolder tabFolder = newCTabFolder(shell, SWT.CLOSE); |
可以在每个TabItem上显示关闭窗口。
SashForm(分割窗框):可以将屏幕的区域分成几部分,并可以通过拖动窗框改变窗口的大小。
CBanner(自动以分割框):SashForm的变体,有3个控件,分别放在窗口的左侧(left)、右侧(right)、底部(bottom)。
ScrolledComposite(滚动面板)。
5.布局管理器
绝对定位:setBounds(int x, int y, int width, int height)
托管定位:
FillLayout(充满时布局):组件大小相同,不能调节
RowLayout(行列式布局):可以调整边距,不会等宽显示组件,可以折行,设置控件大小RowData
GridLayout(网格式布局):设置单个控件的大小,使用GridData进行定制控件显示
FormLayout(表格式布局):使用FormData和FormAttachment定制控件显示
StackLayout(堆栈式布局)
6.事件模型
监听器(Listener):接收事件发生的对象,负责处理事件到达后响应事件的代码。监听器对应是一个接口,要响应一个事件就要实现该接口中的方法。监听器类的形式为XXXListener,XXX标示某一类型的监听器。
Event(事件):当一个事件到达事件监听对象时,要携带一些该事件所附加的一些信息。
注册监听器
适配器(这些都是基本概念,不了解的可以百度^_^)
键盘事件:e.character(表示输入字符的Unicode编码)、e.keyCode(按键所对应的ASCII代码)、e.doit(是否继续执行此事件,设置为false,则取消该事件)、e.stateMask(按下其他键的同时所使用的辅助键)
键盘事件举例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
public class TestKeyListener {
|
鼠标事件:MouseEvent(双击)、MouseMoveEvent(移动)、MouseTrackEvent(跟踪)
鼠标监听事件举例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 |
package com.cntrust.test.events;
|
如果觉得有用,欢迎点赞,可诚邀可视化朋友加入群227963113^_^
本文链接《可视化(番外篇)——SWT总结》
友情赞助
如果你觉得博主的文章对你那么一点小帮助,恰巧你又有想打赏博主的小冲动,那么事不宜迟,赶紧扫一扫,小额地赞助下,攒个奶粉钱,也是让博主有动力继续努力,写出更好的文章^^。
1. 支付宝 2. 微信