源代码如下:
package swt.examples;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
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.setLayout(new FillLayout());
Label label = new Label(shell,SWT.NONE);
label.setText("HelloWorld");
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
}
Copy,将swt.jar加入(我下载的是在wswin32下,还有个目录oswin32x86文件夹先不用管),运行,出现错误java.lang.UnsatisfiedLinkError: no swt-win32-3063 in java.library.path。原来还要加运行参数-Djava.library.path=D:backuptools eclipsepluginsorg.eclipse.swt.win32_3.0.1oswin32x86(看到另一个文件夹的作用了吧,SWT要到这里去寻找dll控件)。现在在运行,一切ok了出现一个带有HelloWorld的窗口,和windows的标准窗口一样。
SWT工作原理
为什么SWT的窗口和Windows的窗口一样呢?这个就要从SWT的工作原理说起了。SWT直接使用操作系统提供的现成的本地图形接口,于是具备本地化的Look & Feel。但是它是怎么做到这一点的呢,当然是通过JNI。SWT所做的无非就是把Win32的API简单的包装了一下,我们在SWT这一层调用的方法、传递的参数被原封不动的代理到了Win32层。这就是SWT的核心思想。SWT有一个很重要的设计原则,那就是,SWT的API一对一的封装OS的API,完全忠实于操作系统的API实现的行为,如果有bug,那也是OS的bug,它不会尝试去“纠正”操作系统,因为那样会潜在的破坏本地化的一些行为。忠实于OS也使得调用者不必但心自己的SWT程序会跟OS的本地GUI有不一致的地方,如有必要直接参考MSDN即可。SWT其实就是这样一个thin wrapper,我们通过它可以方便的访问Win32的图形API,为我们的应用程序提供native的Look & Feel。