第4节:来一个Hello world

代码

package cn.haibin.rcp.test.oscblog;

import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

/**
 * 功能说明:基于SWT的单窗口演示程序
 * 
 * @author cn.haibin
 *
 */
public class SwtHelloWorld {

	public static void main(String[] args) {
		final Display display = Display.getDefault();// Display多线程操作负责管理事件循环和控制UI线程和其它线程之间的通信
		final Shell shell = new Shell(); // shell是程序的主窗口
		shell.setSize(300, 200); // 设置主窗口的大小
		shell.setText("HelloWorld"); // 设置主窗口的标题

		/**
		 * 在这个地方:创建主窗口中所包含的其他控件 .......
		 */

		shell.layout(); // 应用界面布局
		shell.open(); // 打开shell主窗口

		while (!shell.isDisposed()) {// 如果shell主窗口没有关闭,则一直循环
			if (!display.readAndDispatch())
				display.sleep(); // 如果display不忙,就让display处于休眠状态
		}

		display.dispose(); // 释放display资源
	}

}

运行结果

SWT之Hello World

###知识拓展 本来自己想说点啥,看到一篇文章:SWT全接触,总结的十分,十分到位,我也就不班门弄斧了。直接拿来分享(http://my.oschina.net/quanzhong/blog/271087)

  • Display 这是一个顶层容器组件,类似于Container或Component的功能,它主要负责与底层的窗口系统之间的连接。在具体含义上,它代表"屏幕"。 一个Display可以包含多个Shell(也是容器组件,下面会介绍到)。 通常情况下,一个应用程序只含一个Display,即Display通常是一个单例组件(Singleton)。

  • Shell 它表示位于"屏幕"上面的"窗口",是Composite组件和Control组件构成的组件树的根。 在我们的HelloWorld程序中,我们可以设置标题(setText()),设置大小(setSize()),然后通过open()方法来显示这个窗口。怎么样,感觉很像JFrame吧?其实功能上差不多。

  • Composite 可以包含其它Composite和Control的容器

  • Control 这是一个重量级(HeavyWeight)系统对象。像按钮(Button),标签(Label),表格,工具栏和树形结构这些组件都是Control的子类,Conposite和Shell也不例外。

  • 消息循环 我们可以看到,上面的代码中有这样的语句:

while (!shell.isDisposed()) 
{
    if (!display.readAndDispatch()) 
        display.sleep ();
}

如果你像我一样是由Java语言起步的,那么你会对这个消息循环的代码感到比较陌生,毕竟在SWING中我们主要利用事件驱动模型而不这样利用类似于Windows程序设计中的消息循环的方法来处理事件。但是这段代码意义还算简单明了,就是反复的读取和分派(dispatch)事件,并在没有事件的时候把控制权还给CPU。

  • 资源的释放 最后一条语句是display.dispose ();,这告诉我们操作系统的资源是由程序员显示释放的。资源的释放遵循以下两条规则:
  1. 如果你创建了某个资源,那么你就有责任释放它。
  2. 释放父组件资源的同时也释放了其子组件的资源。
  • 标准构造函数 窗口组件被创建的时候必须伴随一个他的上层组件,例如,我要建立一个按钮就可以采用如下方法:Button button = new Button(shell, SWT.PUSH); 其中,Button的父组件Shell是必不可少的,这样就限定了我们生成组件的顺序。 第二个参数被称为"Style Bit",表示了这个组件的显示特性,每种特性占一位,如下例所示: Text test=new Text(group, SWT.SINGLE|SWT.BORDER); 这条代码生成了一个单一的,有边框的文本框。这显然又与习惯了JavaBeans模型,总是用setXXX()来设置属性的我们不太适应--毕竟是IBM的东西啊,秉承了其产品不易上手的传统。

  • shell类不能被继承 虽然没被定义成final类型,但其父类Decorations有一个checkSubclass()方法,继承shell类都会在执行此方法是抛出异常SWTException:Subclass not allowed.在面向对象的设计原则中,组合优于继承,SWT中组件最好都不要使用继承来扩展,而大部分JFace组件可以通过继承来扩展。

最后,再分享一个大侠的佳作:http://my.oschina.net/nutzfans/blog/495134。绝对的清晰、全面。

转载于:https://my.oschina.net/u/2494556/blog/688929

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值