[转]Eclipse插件开发之基础篇(6) SWT简介
原文地址:http://www.cnblogs.com/liuzhuo/archive/2010/09/01/eclipse_plugin_1_3_1.html
SWT(Standard Widget Toolkit)是为Eclipse平台开发的GUI工具包。SWT构建了Eclipse的UI,但SWT并不依赖Eclipse,也可以被单独使用。
1. SWT的特征
现在的Eclipse中绝大部分的UI都由SWT的组件构成。
SWT最大的特征就是不实现Pure Java,对各个OS平台API的依赖在必要的时候才会通过java去调用。由此反映速度和OS中的自然应用相同。另外,依赖于OS API部分都被封装在了SWT内部,用SWT开发出来的应用程序,在更换了SWT库或者OS的时候都不会受到影响。
2.SET的开发环境和运行环境
SWT不仅可以用于开发Eclipse的插件,也可以用于单独的GUI的开发。作为单独的应用程序运行时,需要与OS对应的SWT库。
请确认在Eclipse的plugins文件夹中有SWT的JAR文件存在(Windows的情况下是org.eclipse.swt.win32.win32.x86_3.4.1.v3449c.jar等)。
发布使用SWT开发的应用程序时,SWT库文件也要一起发布。单独的SWT库在Eclipse的下载页面就可以找到。页面下方的[Binary and Source]发布了各种OS下的版本。现在已经提供了Windows、WindowsCE、Linux、Solaris、QNX、AIX、HP-UX、MacOS的运行库。
3.SWT的基本
最简单的SWT应用
下面代码是最简单的SWT应用程序。
代码1
|
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
|
public static void main(String[] args) { // 生成Display的对象① Display display = new Display(); // 生成Shell的对象② final Shell shell = new Shell(display); shell.setText("SWT的例子"); shell.setLayout(new FillLayout(SWT.VERTICAL)); // 生成Label对象③ Label label = new Label(shell, SWT.BORDER); label.setText("请点按钮"); // 生成Button对象③ final Button button = new Button(shell, SWT.PUSH); button.setText("OK"); // 为Button的时间定义监听器④ button.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { MessageBox messageBox = new MessageBox(shell, SWT.OK | SWT.ICON_INFORMATION | SWT.APPLICATION_MODAL); messageBox.setMessage("按下了(" + button.getText() + ")按钮"); messageBox.open(); } }); //打开shell对象 ⑤ shell.pack(); shell.open(); //结束前一直循环 ⑥ while (!shell.isDisposed()) { if (!display.readAndDispatch()) { display.sleep(); } } //释放display对象⑦ display.dispose();} |
1.生成Display的对象
Display对象是平台GUI层和SWT间的连接。Widget等,SWT的GUI组件通过Display对象和执行平台提供的API。
2.生成Shell的对象
Shell对象负责画面窗体的显示。通过Shell对象可以调整窗体的大小,标题以及对窗体进行布局管理。
3.在Shell对象上生成Widget
SWT中把输入框、按钮等GUI控件称为Widget。这个步骤为前一步生成的window配置了Widget。并且对每个控件的text属性、在画面上的位置等等做了设置。
4.为Button的事件定义监听器
按下按钮、选择下拉框等等的用户动作、在Widget中通过事件进行传达。这个步骤为事件生成了对应的处理--listener,并且注册到了Widget上。
5.打开shell对象
对Widget的设置全部结束后,就可以让窗体显示了。窗体显示时需要调用Shell对象的open方法。open方法在内部启动一个新线程对窗体显示。
6.结束前一直循环
因为SWT的应用会启动一个新的线程,如果不阻塞主线程的话整个应用就会结束了。为了不让主线程结束,我们用了一个while循环,知道shell关闭位置一直循环。
7.释放display对象
SWT并不是纯java的,框架会依赖一些自然语言的API。所以,生成的SWT对象要显式的调用dispose方法来执行销毁动作。但是,dispose方法会递归调用子对象的dispose方法,所以想label和button之类的Widget就不用再调用dispose方法了。
[转]Eclipse插件开发之基础篇(6) SWT简介的更多相关文章
- [转]Eclipse插件开发之基础篇(1) 插件开发的基础知识
原文地址:http://www.cnblogs.com/liuzhuo/archive/2010/08/13/eclipse_plugin_1_0_2.html 名词翻译 有一些名词在翻译的过程中可能 ...
- [转]Eclipse插件开发之基础篇(2) 第一个Eclipse插件
原文地址:http://www.cnblogs.com/liuzhuo/archive/2010/08/15/eclipse_plugin_1_1_1.html 在Eclipse中使用PDE(Plug ...
- Eclipse插件开发之基础篇(4) OSGi框架
转载出处:http://www.cnblogs.com/liuzhuo. 1. 什么是OSGi框架 OSGi(Open Service Gateway Initiative)框架是运行在JavaVM环 ...
- [转]Eclipse插件开发之基础篇(5) 制作OSGi Bundle
原文地址:http://www.cnblogs.com/liuzhuo/archive/2010/08/18/eclipse_plugin_1_2_2.html 1. 生成OSGi工程 首先打开新工程 ...
- [转]Eclipse插件开发之基础篇(4) OSGi框架
原文地址:http://www.cnblogs.com/liuzhuo/archive/2010/08/18/eclipse_plugin_1_2_1.html 1. 什么是OSGi框架 OSGi(O ...
- [转]Eclipse插件开发之基础篇(3) 插件的测试与调试
原文地址:http://www.cnblogs.com/liuzhuo/archive/2010/08/17/eclipse_plugin_1_1_2.html 1. 使用JUnit对插件进行测试 E ...
- 关于Eclipse使用Git基础篇
一:Git的下载与安装与基本使用 1.打开eclipse->help->Eclipse Markplace->search->fiind输入Egit 你会看到如下截图(我的为已 ...
- React基础篇 - 02.JSX 简介
JSX 简介 请观察下面的变量声明: const element = <h1>Hello, world!</h1>; 这种看起来可能有些奇怪的标签语法既不是字符串也不是HTML ...
- 自动化测试基础篇--Selenium unittest简介
一.什么是unittest unittest是Python单元测试框架,类似于JUnit框架. unittest中有4个重要的概念:test fixture, test case, test suit ...
随机推荐
- electronr进行签名与公证
windows: 1.设置package.json的有关window打包的相关内容 "win": { "icon": "build/icons/ico ...
- 解决Xcode10 Library not loaded: /usr/lib/libstdc++.6造成的crash及报错
关键字1:dyld: Library not loaded: /usr/lib/libstdc++.6.dylib Referenced from: 关键字2:Reason: no suitabl ...
- Saltstack_使用指南17_salt-ssh
1. 主机规划 salt 版本 [root@salt100 ~]# salt --version salt (Oxygen) [root@salt100 ~]# salt-minion --versi ...
- MySQL 锁的监控及处理
故障模拟 # 添加两项配置 vi /etc/my.cnf [mysqld] autocommit=0 innodb_lock_wait_timeout = 3600 systemctl restart ...
- Linux-3.14.12内存管理笔记【伙伴管理算法(3)】
前面分析了伙伴管理算法的初始化,在切入分析代码实现之前,例行先分析一下其实现原理. 伙伴管理算法(也称之为Buddy算法),该算法将所有空闲的页面分组划分为MAX_ORDER个页面块链表进行管理,其中 ...
- docker 存储卷 Volumes
一,docker容器面临的困境: 容器运行中产生的数据,是放到容器栈的最顶层,当容器停止并被删除后,这些数据就被删除了. docker采用COW(写时复制)策略,导致性能低下.比如有个mysql容器, ...
- Windows 10 任务栏添加网易云音乐控制按钮
软件背景: 算是老帖新发,之前有朋友分享过一个很好用的工具,但可能是因为网易云软件更新后,导致控件失灵了,只剩下歌词控件有用了,所以今天用python重新写了一个小工具,发出来分享给大家,附上之前 ...
- spring mongodb用法
A field annotated with @Id (org.springframework.data.annotation.Id) will be mapped to the '_id' fiel ...
- npm i xxxx -D和npm i xxxx-S的区别
npm i xxxx -D 就是 npm i xxxx --save-dev 是把依赖写入进devDependencies对象里面 devDependencies 是开发环境下的依赖,这里是开发环境下 ...
- 201871010123-吴丽丽《面向对象程序设计(Java)》第十三周学习总结
201871010123-吴丽丽<面向对象程序设计(Java)>第十三周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ ...