文档章节

第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
浦东
程序员
私信 提问
SpringBoot系列三:SpringBoot自定义Starter

原文出处:晴枫 在前面两章 SpringBoot入门 、SpringBoot自动配置原理 的学习后,我们对如何创建一个 SpringBoot 项目、SpringBoot 的运行原理以及自动配置等都有了一定的了解。如果我们系统...

晴枫
2018/11/21
0
0
《Java从小白到大牛精简版》之第3章 第一个Java程序

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

tony关东升
2018/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
Android零基础入门第86节:探究Fragment生命周期

一个Activity可以同时组合多个Fragment,一个Fragment也可被多个Activity 复用。Fragment可以响应自己的输入事件,并拥有自己的生命周期,但它们的生命周期直接被其所属的Activity的生命周期...

鑫鱻
2017/10/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

二进制相关

二进制 众所周知计算机使用的是二进制,数字的二进制是如何表示的呢? 实际就是逢二进一。比如 2 用二进制就是 10。那么根据此可以推算出 5的二进制等于 10*10+1 即为 101。 在计算机中,负数以...

NotFound403
昨天
2
0
day22:

1、写一个getinterface.sh 脚本可以接受选项[i,I],完成下面任务: 1)使用格式:getinterface.sh [-i interface | -I ip] 2)当用户使用-i选项时,显示指定网卡的IP地址;当用户使用-I选项...

芬野de博客
昨天
1
0
Spring Cloud Alibaba基础教程:使用Nacos实现服务注册与发现

自Spring Cloud Alibaba发布第一个Release以来,就备受国内开发者的高度关注。虽然Spring Cloud Alibaba还没能纳入Spring Cloud的主版本管理中,但是凭借阿里中间件团队的背景,还是得到不少...

程序猿DD
昨天
3
0
Java并发编程:深入剖析ThreadLocal

ThreadLocal 的理解 ThreadLocal,很多地方叫线程本地变量,或线程本地存储。ThreadLocal为变量在每个线程中都创建了一个副本,每个线程可以访问自己内部的副本变量。===》解决的问题是线程间...

细节探索者
昨天
2
0
【Python3之异常处理】

一、错误和异常 1.错误 代码运行前的语法或者逻辑错误 语法错误(这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正) def test: ^SyntaxError: invalid...

dragon_tech
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部