前段时间用 eclipse 的插件 SWT 做了一个简单的应用程序界面,感觉没有 VC 做界面方便和强大,还不时的和 AWT 冲突,也可能是刚学,没有体会 SWT 的优点,我把自己的掌握的写出来,大家一起交流哈。

   好了,现在言归正传,开始哈。

1. 安装 Designer_v5.0.0_for_Eclipse3.0

根据 eclipse 版本的不同,下载不同的 SWT-Desiger. 下载地址: http://www.swt-designer.com/

安装方法和所有的 eclipse 插件一样,将 features, plugins 下的文件放到 eclipse 相应的文件夹中就好了,重启 eclipse, OK .

2. 破解 Designer_v5.0.0_for_Eclipse3.0

eclipse->windows->preferences->Designer –Registration and Activation ->SWT Designer Professional Paid ->next-> 输入相关的信息 ->next serial Number Activation Key 输入注册码。注册机的下载地址:
http://www.blogjava.net/Files/zjuedsion/解压并且修改好的破解工具.rar

next OK 了。

3. 新建一个 Test 工程

File- >project-> Designer SWT/JFace Java Project

建好工程后要导入 SWT 的原生库,要不然,项目运行时会抱错: Java.lang.UnsatifiledLinkError. no swt-awt-win32-3064.dll in java.Labrary.path 我这里是 swt-awt-win32-3064.dll ,可能版本会有点不一样。导入的方法:选择项目名,点右键, Import->File System 如下图

 

o_1.gif 


一般
swt-awt-win32-3064.dll x:\eclipse\plugins\org.eclipse.swt.win32_3.0.2\os\win32\x86 下选择好后 Finish 就好了

 4. SWT Application

File->new ->others->Designer->SWT->Application Window

package :  com.swtdesign

name: Myapp

create contents in : public static main() method

如下图

o_2.gif 

 

Finish

就好了

看代码

package com.swtdesigner; // 包名

import org.eclipse.swt.widgets.Display;// 程序所用到的类都会用 import 标记在这里,

import org.eclipse.swt.widgets.Shell;    //import 的快捷键 Ctrl+Shift+O

public class Test{  // 一个标准的 Java HelloWorld

    public static void main(String[] args) {

           //display 负责管理事件循环和控制 UI 线程和其他线程之间的通讯。

        final Display display = Display.getDefault(); 

        final Shell shell = new Shell();  // shell 是程序的主窗口

        shell.setSize(327, 253);  // 设置主窗口的大小

        shell.setText("SWT Application");  // 设置主窗口的标题

        shell.layout();  //shell 应用界面布置

        shell.open();  // 打开 shell 主窗口

        while (!shell.isDisposed()) { // 如果主窗口没有关闭,则一直循环

            if (!display.readAndDispatch())  // 如果 display 不忙

                display.sleep(); //display 休眠

        }

    }

}

从这个代码可以看到,创建一个典型的SWT应用程序需要以下步骤:

l           创建一个 Display

l           创建一个或多个 Shell

l           设置 Shell 的布局

l           创建 Shell 中的的组件(注:本例还没有加入组件,只是一个空窗口)

l           open() 方法打开 Shell 窗口

l           写一个事件转发循环

l           销毁 display

 

 

接下来我们在 应用程序上加一个 Button 并制作他的 单击事件。事件的内容是调出一个提示窗口,和一个文本框,接受外面的输入。

 

如下图在,切换到 design 模式,加一个 button ,在左边的菜单里选一个 button ,然后直接点在面板上,不是拖过去。

可以直接在这里修改属性

双击 button 为其添加 selection 事件,也可以点右键- >implement->selection-
>widgetSelected

 

 

 o_3.gif

 

然后切换到 source 模式,看到增加了以下代码

             

final Button button = new Button(shell, SWT.NONE);

 

// 这就是增加的鼠标单击事件代码,以匿名内部类的方式写的

 

              button.addSelectionListener(new SelectionAdapter() {

 

// 要实现事件,必须实现 widgetSelected 方法

                     public void widgetSelected(SelectionEvent e) {

// 信息提示对话框

MessageDialog.openInformation(null,"hello world","hello");

                     }

              });

             

我们可以将匿名内部类,改成不是匿名的

 

将原来的事件代码改为:

              button.addSelectionListener(new addButtonSelected());

同时加 addButtonSelected 内部类

// static 使其可以直接 new ,继承 SelectionAdapter ,直接写方法就可以了

public static class  addButtonSelected extends SelectionAdapter

       {

              public void widgetSelected(SelectionEvent e) {

                     MessageDialog.openInformation(null,"hello world","hello");

              }

       }

 

好了这样就实现了加一个 button ,并单击相应一个事件。够简单了吧。下面加一个文本框

同理切换到 Design 模式下加一个名为 input_Text 的文本框,在文本框左边加个 Clable 的标签“输入”,再加一个 button(input_button) ,点确定后接受输入。然后加一组输出现实, output_Text. output_button

如下图



o_4.gif 

然后加响应代码;

       // 把文本框的内容和一个 String 变量绑定

 

       private static String  output_string=null;

// 输入输出事件

input_button.addSelectionListener(new inputText());

output_button.addSelectionListener(new outputText());

 

// 输入事件

       public static   class  inputText extends SelectionAdapter

       {

              public void widgetSelected(SelectionEvent e)

              {

                     output_string=input_text.getText();

                    

                     System.out.println(output_string);

              }

      

       }

//     输入事件

       public static   class  outputText extends SelectionAdapter

       {

              public void widgetSelected(SelectionEvent e)

              {

                     output_text.setText(output_string);

                    

                    

                     System.out.println(output_string);

              }

      

       }

 

最后的效果如下图


o_5.gif


OK!
结束。如有问题,请联系 edsionchen_zju@hotmal.com