http://blog.51cto.com/redking/66421

简介:
创建插件项目
1.        选择主菜单“文件→新建→项目”命令,在弹出窗口中选择“插件开发→插件项目”,单击“下一步”按钮。
2.        进入下一个窗口,填入项目名myswt,单击“下一步”按钮。
3.        进入到下一个窗口,接受所有默认值,直接单击“完成”按钮。
4.        完成创建向导后,可以看到Eclipse中多了一个myswt项目,其中“插件依赖项”已经对支持SWT项目所需的jar包做好了引用。Src下的myswt包还用不到,这里将它删除掉。
 
 
创建HelloWorld程序
myswt创建com.michael.swt包,在此包下创建一个HelloWorld类,然后把这个类改造为一个简单的SWT程序。
代码内容如下:
package  com.michael.swt;
import  org.eclipse.swt.widgets.Display;
import  org.eclipse.swt.widgets.Shell;
public   class  HelloWorld {
 
     /**
      *   @param   args
      */
     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( "HelloWorld" ); // 设置主窗口的标题
         //------- 创建窗口中的其他界面组件----------
         //.......
         //-------END---------
        shell.layout(); // 应用界面布局
        shell.open(); // 打开shell主窗口
         while  (!shell.isDisposed()){ // 如果shell主窗口没有关闭,则一直循环
             if (!display.readAndDispatch())  // 如果display不忙,就让display处于休眠状态
                display.sleep();
        }
        display.dispose();  // 释放display资源
    }
 
}
从代码中可以看到SWT程序的几个特点:
它需要一个Display对象来支撑SWT界面的显示;
Shell是主窗口,其他所有界面组件(如按钮、文本框等)都创建于其中。
虽然这个程序涉及Display多线程操作,但在实际SWT编程中却很少关心这方面,基本是照搬同样的代码。
 
运行HelloWorld
选择主菜单“运行→运行方式→SWT应用程序”命令来运行HelloWorld.java,运行显示的是一个空白窗口。
 
 
HelloWorld更进一步
上面的HelloWorld程序比较简单,现在给界面加入一个按钮,当单击该按钮时能弹出一个对话框,要实现这个效果,在原HelloWorld类的省略号处加入如下代码:
Button button =  new  Button(shell,SWT.NONE);  // 创建一个按钮对象
button.setText(HelloWorld);  // 设置按钮上的文字
button.setBounds(88,94,100,25);  // 设置按钮在窗口中的位置和大小
// 编写按钮被单击时的事件代码
button.addSelectionListener( new  SelectionAdapter(){
         public   void  widgetSelected(SelectionEvent e){
         // 弹出一个对话框,MessageDialogJFace中的类
        MessageDialog.openinformation(shell, "hello" , "HelloWorld" );
        }
})
代码还需要用Ctrl+Shift+O快捷键加入相关类的import语句,这时候要注意Button不要导入AWTjava.awt.Button,而应该导入SWTorg.eclipse.swt.widgets.Button.以后在写SWT程序时都要注意这个问题。代码修改后的运行效果下图。
完整代码如下:
package  com.michael.swt;
import  org.eclipse.swt.widgets.Display;
import  org.eclipse.swt.widgets.Shell;
import  org.eclipse.swt.SWT;
import  org.eclipse.swt.events.SelectionAdapter;
import  org.eclipse.jface.dialogs.MessageDialog;
import  org.eclipse.swt.events.SelectionEvent;
import  org.eclipse.swt.widgets.Button;
public   class  HelloWorld {
     /**
      *   @param   args
      */
     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( "HelloWorld" ); // 设置主窗口的标题
         //------- 创建窗口中的其他界面组件----------
        Button button =  new  Button(shell,SWT. NONE );  // 创建一个按钮对象
        button.setText( "HelloWorld" );  // 设置按钮上的文字
        button.setBounds(88,94,100,25);  // 设置按钮在窗口中的位置和大小
         // 编写按钮被单击时的事件代码
        button.addSelectionListener( new  SelectionAdapter(){
             public   void  widgetSelected(SelectionEvent e){
                 // 弹出一个对话框,MessageDialogJFace中的类
                MessageDialog.openInformation(shell, "hello" , "HelloWorld" );
            }
        });
         //-------END---------
        shell.layout(); // 应用界面布局
        shell.open(); // 打开shell主窗口
         while  (!shell.isDisposed()){ // 如果shell主窗口没有关闭,则一直循环
             if (!display.readAndDispatch())  // 如果display不忙,就让display处于休眠状态
                display.sleep();
        }
        display.dispose();  // 释放display资源
    }
}
 
注意:
虽然Shell的类定义中没有final前缀,但我们依然不能不继承Shell类,因为Shell的父类Decorations有一个checkSubclass()方法,继承Shell的类都会在执行此方法时抛出异常“org.eclipse.swt.SWTException:Subclassing not allowed”。
在面向对象的设计原则中,组合优于继承。Eclipse鼓励遵循这一原则,所以不要轻易去继承SWT中的界面组件(如Shell类)来实现扩展,除非是那些最初设计目的就是说为了通过继承方式来扩展功能的类,例如对话框的Dialog类。一般来说,大部分SWT组件都不要继承它,而大部分JFace组件可以通过继承来扩展。

*********************************************************
 








本文转自redking51CTO博客,原文链接: http://blog.51cto.com/redking/64535 ,如需转载请自行联系原作者


相关文章
|
Web App开发 前端开发 Java
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
线程的状态有:new、runnable、running、waiting、timed_waiting、blocked、dead 当执行new Thread(Runnabler)后,新创建出来的线程处于new状态,这种线程不可能执行 当执行thread.start()后,线程处于runnable状态,这种情况下只要得到CPU,就可以开始执行了。
808 0
|
Web App开发 前端开发
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
总结和计划总是让人喜悦或镇痛,一方面以前一段时间没有荒废,能给现在的行动以信心,另一方面看到一年的时间并不能完成很多事情,需要抓紧时间。
699 0
|
Java Apache
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
hbase从集群中有8台regionserver服务器,已稳定运行了5个多月,8月15号,发现集群中4个datanode进程死了,经查原因是内存 outofMemory了(因为这几台机器上部署了spark,给spark开的...
882 0
|
Web App开发 前端开发
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
Every Programmer Should Know These Latency Numbers 1秒=1000毫秒(ms) 1秒=1,000,000 微秒(μs) 1秒=1,000,000,000 纳秒(ns) 1秒=1,000,000,000,000 皮秒(ps) L1 cache reference .
713 0
|
Web App开发 前端开发
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
zookeeper watch的定义如下:watch事件是一次性触发器,当watch监视的数据发生变化时,通知设置了该watch的client,即watcher。
1041 0
|
Web App开发 存储 前端开发
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
1.HBase依赖于HDFS,HBase按照列族将数据存储在不同的hdfs文件中;MongoDB直接存储在本地磁盘中,MongoDB不分列,整个文档都存储在一个(或者说一组)文件中 (存储) 2.
822 0
|
Web App开发 监控 前端开发
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
已发现2个内存错误,应用名称(kernel:),日志内容(hangzhou-jishuan-DDS0248 kernel: sbridge: HANDLING MCE MEMORY ERROR hangzhou-jis...
941 0

热门文章

最新文章