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方法了。?
?
?转载请注明出处,http://www.cnblogs.com/liuzhuo.