`

了解Display和Shell

    博客分类:
  • SWT
阅读更多

在前一个helloWorld程序中,虽然例子很简单,但是反映了我们编写swt程序的主要步骤:
   1.创建一个Display对象
   2.创建一个或者多个Shell对象,你可以认为Shell代表了程序的窗口。
   3.在Shell内创建各种部件(widget)
   4.对各个部件进行初始化(外观,状态等),同时为各种部件的事件创建监听器(listener)
   5.调用Shell对象的open()方法以显示窗体
   6.各种事件进行监听并处理,直到程序发出退出消息
   7.调用Display对象的dispose()方法以结束程序。
   现在让我深入了解一下在swt程序中最关键的两个类:Display和Shell。
  
Display:与操作系统沟通的桥梁
  
我们在前面说过,每个swt程序在最开始都必须创建一个Display对象,它所起的作用就是担当swt与操作系统沟通的一座桥梁。Display对象主要负责swt和操作系统的通信,它将swt的各种调用转化为操作系统的底层调用,控制操作系统为swt分配的资源。Display实际上担当着“幕后工作者”的身份,它为swt屏蔽了对操作系统图形资源的调用,但是在你创建的图形用户界面中看不到它的影子。
    在前面的helloWorld程序中,我们可以看到构建一个Display对象是和普通的java对象一样通过构造函数实现的。它为实现图形界面准备了最基本的条件。而在程序结束时我们必须显示的调用dispose()方法来释放程序运行中所获得的资源。在这点上也是swt与其它java程序的最大区别,就是程序中操作部件要遵守谁创建谁销毁的原则,这点会在后面的程序中体现出来。一般来说,一个swt程序只需要一个Display对象,当然也可以创建多个Display对象,这要依据具体的平台来确定。在swt的javadoc中有对这个问题的描述:
    “Applications which are built with SWT will almost always require only a single display. In particular, some platforms which SWT supports will not allow more than one active display. In other words, some platforms do not support creating a new display if one already exists that has not been sent the dispose() message.”
     大概意思就是:在建立swt的程序时一般总是只需要一个display对象。但也有特别的情况,有的平台不支持swt创建多个活动的display对象。也就是说,如果已存在一个display对象,但是给它没有发送disose()消息来销毁它,有的平台是不支持再创建一个新的display对象。
   
Shell:窗口
   
一个shell对象就是一个窗口,你可以在上面放置各种部件创建丰富的图形界面。
    我们都知道窗口很多种,比如窗口有可以调整大小的,有不可的,有的没有最大化最小化按钮。这些窗体的特征在swt中被称为风格(style)。一个窗体的风格可以用一个整数进行定义,这些风格定义在org.eclipse.swt.SWT中。Shell对象可用的风格包括:BORDER, CLOSE, MIN, MAX, NO_TRIM, RESIZE, TITLE , PLICATION_MODAL, MODELESS, PRIMARY_MODAL,S YSTEM_MODAL。对于这些风格的含义可以从字面意义上看出来,在创建一个Shell时,我们可以这样定义它的风格:
    Shell shell = new Shell(display,SWT.CLOSE | SWT.SYSTEM_MODAL);
    因为swt可以运行与各种平台纸上,而这些平台上的窗口管理器千差万别,所以所有这些风格都不是肯定可以实现的。在swt的javadoc中,这被称为暗示(hints)。Shell对象方法大都和GUI有关,比如setEnabled()设定了窗体是否能和用户进行交互,setVisible()设定了窗体是否可见,setActive()将窗体设为当前活动窗口。我们可以用open()方法打开一个窗体,close()方法关闭一个窗体。

 

//当窗口未释放时
		while (!shell.isDisposed()) {
			//如果 display 对象事件队列中没有了等待的事件,就让该线程进入等待状态
			if (!display.readAndDispatch())
				display.sleep();
		}
		//也可以这样理解UI线程,当程序启动后,如果用户不进行任何操作,该UI线程就进入了等待状态.一旦触发了某个事件,比如说单击了
		//某个按钮或是按下了键盘上的按键,这时在事件队列中就等待了一个事件,此时UI线程就处理队列中的事件,直至队列中的事件全部处理完毕,
		//又恢复了睡眠状态.

 

分享到:
评论

相关推荐

    SWT创建Shell窗口

    SWT(Standard Widget Toolkit)是Java编程环境中用于创建图形用户界面(GUI)的一种库,它提供了与操作系统原生UI组件紧密集成的...同时,SWT包中包含了所有SWT类和接口,你可以通过查阅文档或源码来了解更多细节。

    华为光猫shell命令补全文件

    总的来说,了解并熟练运用华为光猫的Shell命令不仅可以提升网络运维人员的工作效率,也有助于更有效地排查和解决问题。对于网络管理员而言,掌握这类命令补全文件的使用,是提高工作效率、保证网络稳定运行的重要...

    shell分步实现俄罗斯方块游戏

    学习这个项目不仅可以提升Shell编程技巧,还能深入了解游戏开发的基本原理,因为俄罗斯方块涉及到许多常见的编程问题,如数据结构(用于存储游戏状态)、算法(如方块旋转和消除行的计算)以及实时响应(通过循环...

    shell 图书管理系统

    ### 知识点总结 #### 一、Shell脚本与图书管理系统 - **Shell脚本简介**:Shell脚本是用于Unix或类Unix系统(如Linux)中的脚本语言,...通过上述分析,我们可以了解到Shell脚本如何组织和执行命令来完成特定的任务。

    BIOS shell 下面刷 log

    2. **日志查看**: 在某些BIOS Shell中,存在如`LOG`或`DISPLAY_LOG`这样的命令,允许用户在控制台上显示当前的POST日志。这有助于识别硬件问题,比如内存错误、驱动器问题等。 3. **日志保存**: 如果需要保存日志以...

    linux系统获取基础硬件信息的shell

    本文将详细介绍如何使用Shell命令来查询和展示Linux系统的硬件详情。 首先,我们需要了解几个关键的硬件组成部分,包括处理器(CPU)、内存(RAM)、磁盘存储、网络接口以及显卡等。以下是一些常用的Shell命令,用于...

    Linux下的程序开发:基础SHELL编程

    总之,通过学习和实践Bash Shell编程,开发者不仅可以提升Linux环境下的工作效率,还能深入了解操作系统的工作原理,为更复杂的系统级编程打下坚实基础。这篇博客提供了一个很好的起点,鼓励大家深入探索和实践,...

    shell编程入门

    Shell编程主要面向的是Linux和UNIX操作系统,这是因为这些系统都提供了Shell这种命令行解释器。下面将详细介绍标题中提及的各个知识点。 首先,标题提到了“Shell脚本编程”,这意味着我们将通过编写脚本的方式来...

    Linux Shell编程(基础教程

    ### Linux Shell编程基础教程 #### 1. Linux 脚本编写基础 ##### 1.1 语法基本介绍 在 Linux 系统中,Shell 脚本是一种强大的工具,可以自动化许多日常...了解其基本语法和常用命令是学习 Shell 编程的良好开端。

    The Grid Analysis and Display System

    GRADS中的变量用于标识数据集中的不同物理量,用户需要了解如何命名和引用这些变量。 #### 八、表达式 GRADS支持复杂的数学表达式,用户可以定义新的变量来进行数据分析和计算。 #### 九、定义变量 - **定义新变量...

    java swt 隐藏和显示任务栏图标和托盘图标(2)

    首先,我们需要理解SWT中的`Display`和`Shell`概念。`Display`是应用程序的主要窗口,而`Shell`则是用户与应用交互的窗口。在SWT中,`Shell`可以设置为可见或不可见,这直接影响到任务栏上的图标状态。 要隐藏任务...

    SWT界面编程知识汇总

    5. **配置组件属性**:通过`setText()`、`setSize()`、`setBackground()`等方法,可以设置Shell和组件的标题、大小和颜色等属性。 6. **打开和运行**:`shell.open()`打开Shell,然后进入一个事件转发循环,通过`...

    在Eclipse中用SWT设计界面

    Shell代表应用程序中的窗口,可最大化、最小化或正常化,分为高层shell和对话shell两种类型;Widgets则是用户界面的各种控件,如按钮、文本框等,其样式和行为可通过style bits(风格位)进行定制。 ### 在Eclipse...

    使用Shell扩展在Explorer中显示文件夹的内容大小

    解压后,你可以查看`Display-content-size-for-a-folder-in-Explorer-usin.pdf`文档,了解详细的步骤和代码解释。 综上所述,实现这个功能需要深入理解Windows Shell扩展、COM编程、C++以及相关API的使用。通过编写...

    eclipse开发SWT应用

    然后可以使用`Display`对象来创建各种控件,例如`Button`、`Text`等,并通过`shell.pack()`和`shell.open()`方法设置控件布局并显示窗口。 4. **事件处理**:SWT控件可以通过添加监听器来响应用户操作,例如按钮的...

    [HACK学习呀] - 2020-04-26 ThinkCMF缓存Getshell1

    在本文中,我们将深入探讨一个针对ThinkCMF2.X系统的安全漏洞,该漏洞允许攻击者通过缓存机制实现Getshell攻击。Getshell是指攻击者通过某种...对于开发者来说,了解并防范这类攻击手法是确保应用程序安全的关键步骤。

    使用 SWT 写图形化界面的例子(eclipse)

    Shell shell = new Shell(display); shell.setText("SWT Example"); ``` 接下来,添加控件到Shell中。以创建一个按钮为例: ```java Button button = new Button(shell, SWT.PUSH); button.setText("点击我"); ```...

    SWT运行环境的配置

    `Display`和`Shell`是SWT中的核心类,分别代表显示器和窗口。`readAndDispatch()`方法处理事件循环,使窗口保持活动状态。 最后,要运行SWT应用程序,右键点击项目,选择“运行As”>“Java应用程序”。如果一切配置...

    JwWindow

    在Java编程领域,SWT...开发者Javen Wong通过`JwWindow.java`的代码和`shell_1.png`、`shell_2.png`图片文件,提供了实践这些概念的例子,对于学习和理解如何在Java GUI应用程序中实现个性化窗口设计是非常有价值的。

Global site tag (gtag.js) - Google Analytics