文档章节

第4节:来一个Hello world

websect
 websect
发布于 2016/06/08 20:49
字数 1036
阅读 18
收藏 0

代码

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。绝对的清晰、全面。

© 著作权归作者所有

共有 人打赏支持
websect
粉丝 1
博文 7
码字总数 3310
作品 0
浦东
程序员
《Java从小白到大牛精简版》之第3章 第一个Java程序

《Java从小白到大牛》纸质版已经上架了!! 本书第一个Java程序是通过控制台输出HelloWorld,以这个示例为切入点,向大家系统介绍Java程序的编写、Java源代码结构以及一些基础知识。 在Java中...

tony关东升
06/26
0
0
Android零基础入门第79节:Intent 属性详解(上)

Android应用将会根据Intent来启动指定组件,至于到底启动哪个组件,则取决于Intent的各属性。本期将详细介绍Intent的各属性值,以及 Android如何根据不同属性值来启动相应的组件。 Intent 对...

鑫鱻
2017/10/19
0
0
Android零基础入门第85节:Fragment使用起来非常简单

Fragment创建完成后并不能单独使用,还需要将Fragment加载到Activity中,在Activity中添加Fragment的方式有两种:静态加载和动态加载,接下来分别进行学习。 一、静态加载 静态加载Fragment非...

鑫鱻
2017/10/27
0
0
Oracle中的substr()函数 详解及应用-收集

1)substr函数格式 (俗称:字符截取函数)   格式1: substr(string string, int a, int b);   格式2:substr(string string, int a) ; 解释: 格式1 1、string 需要截取的字符串 2、a 截...

诺岚
03/20
0
0
Cocos2d-x开发实例介绍帧动画使用

下面我们通过一个实例介绍一下帧动画的使用,这个实例如下图所示,点击Go按钮开始播放动画,这时候播放按钮标题变为Stop,点击Stop按钮可以停止播放动画。 下面我们再看看具体的程序代码,首...

智捷课堂
2014/07/15
89
0

没有更多内容

加载失败,请刷新页面

加载更多

awk命令用法介绍

10月18日任务 9.6/9.7 awk 1.awk(上)(下) 1.awk 分段操作功能 指定分隔符,并把第一段打印出来,不会改动文件内容 将所有内容打印出来 awk 没有指定分隔符号,则会默认用空格或者空白字符...

hhpuppy
48分钟前
2
0
Spring Cloud Eureka Server高可用之:在线扩容

本文共 1591字,阅读大约需要 6分钟 ! 概述 业务微服务化以后,我们要求服务高可用,于是我们可以部署多个相同的服务实例,并引入负载均衡机制。而微服务注册中心作为微服务化系统的重要单元...

CodeSheep
今天
2
0
内网esxi主机上安装CoreOS虚拟机

CoreOS是一个为专门运行容器而设计的轻量级linux发行版,旨在通过轻量的系统架构和灵活的应用程序部署能力简化数据中心的维护成本和复杂度。它没有包管理工具,运行容器化应用以提供服务;默...

hiwill
今天
1
0
20181018 上课截图

![](https://oscimg.oschina.net/oscnet/49f66c08ab8c59a21a3b98889d961672f30.jpg) ![](https://oscimg.oschina.net/oscnet/a61bc2d618b403650dbd4bf68a671fabecb.jpg)......

小丑鱼00
今天
3
0
WinDbg

参考来自:http://www.cnit.net.cn/?id=225 SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols ctrl + d to open dump_file Microsoft (R) Windows Debugger Version 6.12.0002.633......

xueyuse0012
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部