[转]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 ...
随机推荐
- 10分钟浅谈CSRF突破原理,Web安全的第一防线!
CSRF攻击即跨站请求伪造(跨站点请求伪造),是一种对网站的恶意利用,听起来似乎与XSS跨站脚本攻击有点相似,但实际上彼此相差很大,XSS利用的是站点内的信任用户,而CSRF则是通过伪装来自受信任用户 ...
- Cobalt Strike系列教程第五章:截图与浏览器代理
Cobalt Strike系列教程分享如约而至,新关注的小伙伴可以先回顾一下前面的内容: Cobalt Strike系列教程第一章:简介与安装 Cobalt Strike系列教程第二章:Beacon详 ...
- ArcGIS Server10.4 service发布步骤
准备内容 安装环境:win10*64位专业版 安装文件:ArcGIS_Server_Ent_Windows_1041_150998.iso 破解文件:Lic10.4.1.ecp #安装Server前, ...
- web渗透测试
信息收集 网络搜索 目录遍历:site:域名 intitle:index.of 配置文件泄露:site:域名 ext:xml | ext:conf | ext:cnf | ext:reg | ext: ...
- iOS 自定义导航栏
参考链接:https://blog.csdn.net/huanglinxiao/article/details/100537988 demo下载地址:https://github.com/huangx ...
- [b0044] numpy_快速上手
1 概念理清 2 创建数组 2.1 f1= np.array( [ [1,2,3,4], [2,3,4,5], [3,4,5,6] ]) 其他代码 a= np.array([ [ [3.4,5,6,8 ...
- ORA-39901 EXPDP分区报错/分区表删除不完全
[oracle@localhost zgy]$ expdp orders/orders directory=DUMPDIR DUMPFILE=test_exp.dmp TRANSPORT_TABLES ...
- MongoDB 不在开源了,使用 Homebrew 安装只能玩社区版了
使用了大半年的 mongodb ,最近在公司的新项目中应用,在 mac 上安装 mongodb 时发现始终安装不了,一直在报下面这样的错误: brew install mongodb 升级 brew ...
- Error 1327 Invalid Drive 的解决办法
出现场景: 当我在安装STM32公司的 STM32 ST-LINK Utility v4.5.0 软件时,弹出了这个错误.弹框的内容大体是说找不到D盘,这里忘记截图了. 我的电脑的硬盘是我另一 ...
- 《Linux/UNIX系统编程手册》第56章 SOCKET:介绍
关键词: 1. socket基础 一个典型的客户端/服务器场景中,应用程序使用socket进行通信的方式如下: 各个应用程序创建一个socket.socket是一个允许通信的设备,两个应用程序都需要用 ...