SWT学习(一)
1.下载swt:
http://www.eclipse.org/swt/
在Release栏下载目标平台所需要的zip包,解压到某个目录。
Windows:
http://download.eclipse.org/eclipse/downloads/drops/R-3.6.2-201102101200/download.php?dropFile=swt-3.6.2-win32-win32-x86.zip
Linux:
http://download.eclipse.org/eclipse/downloads/drops/R-3.6.2-201102101200/download.php?dropFile=swt-3.6.2-gtk-linux-x86.zip
2.将swt导入到workspace中作为一个project,供其余的project引用。
Import-->Existing Projects into Workspace
3.Hello World
3.1Swt基础概念:
3.1.1所有的内容都要通过Display对象来输出,一般一个程序只有一个Display对象。
3.1.2窗口被称为Shell
3.2创建工程,并引用Swt工程
New-->Java Project
在新创建的工程上点右键,选Properties,修改Java Build Path:
选项卡选择Projects-->Add,勾选刚导入的swt工程,此时要保证此swt工程是打开状态的。
勾选后就可以使用swt包中的类了。
3.3创建HelloWorld类:
New-->Class
输入类名,并勾选创建main函数。
3.4创建Display和Shell
Display display = new Display();
Shell shell = new Shell(display)
3.5设置shell标题栏文本
shell.setText("Hello world!");
3.6显示窗口
shell.open()
试试执行一下,屏幕上一个窗口一闪而过,什么都没看清,这是因为shell.open执行完毕后程序退出了,窗口自然消失了。
3.7在shell.open()后加个死循环等待看看
for(;;) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
}
再执行一下,可以看到一个窗口出现,但是什么事件都不响应。
3.8不响应事件是因为循环中没有处理事件,将循环修改一下,改成调用Display类的事件读取分发函数,则就能响应事件了。
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
3.9当程序执行完毕时回收资源。
display.dispose();
在swt中有两个原则:
3.9.1谁创建谁dispose,就好像内存分配回收一样,display是被创建的,所以要被dispose。shell在关闭窗口时已经dispose了,所以不必再dispose。
3.9.2父组件dispose时会dispose所有子组件。
完整的代码:
import org.eclipse.swt.widgets.Display;import org.eclipse.swt.widgets.Shell;public class HelloWorld {public static void main(String[] args) {Display display = new Display();Shell shell = new Shell(display);shell.setText("Hello world!");shell.open();while (!shell.isDisposed()) { if (!display.readAndDispatch()) { display.sleep(); } } display.dispose();}}