Eclipse插件开发实战2——SWT

一、SWT简介

SWT(StandardWidget Toolkit) 标准小窗口工具箱,一开源的GUI编程框架,与AWT/Swing有相似的用处,eclipse就是用SWT开发的。SWT主要是用来编写java桌面应用程序的,类似的还有swing。提供可移植API,并与底层本机OS GUI平台紧密集成,它是一个与本地窗口系统集成在一起的小部件集和图形库。SWT由JNI(Java Native Interface,Java本机接口)调用操作系统的内部API,因此运行速度快,能够获得与操作系统的内部应用程序相同的外观。

除此之外,JFace是一个用户界面工具箱,也是一个易用、功能强大的图形包,它简化了常见的图形用户界面的编程任务。SWT和JFace都是Eclipse平台上的主要组件。JFace是在SWT的基础上创建的,但JFace并不能完全覆盖SWT的功能。由于JFace的功能更强大,因此在java里做图形界面开发时一般优先选用JFace。(在此特别强调做图形界面是用java,其实界面设计用C#更省事)

SWT是Eclipse图形API的基础。SWT中常用的包有:

1.org.eclipse.swt.widgets :最常用的组件基本都在此包中,如Button、Text、Label、Combo等。其中两个最重要的组件是Shell和Composite。Shell相当于应用程序的主窗体;Composite是容纳组件的容器,相当于SWING中的Panel对象。

2.org.eclipse.swt.layout :主要的界面布局方式在此包中。SWT对组件的布局也采用了AWT/SWING中的Layout和Layout Data结合的方式。

3.org.eclipse.swt.custom :对一些基本图形组件的扩展在此包中,比如其中的CLabel就是对标准Label组件的扩展,在CLabel上可以同时加入文字和图片。在此包中还有一个新的布局方式StackLayout。

4.org.eclipse.swt.event :SWT采用了和AWT/SWING一样的事件模型,在包中可以找到事件监听类和相应的事件对象。比如鼠标事件监听器MouseListener,MouseMoveListener等,及对应的事件对象MouseEvent。

5.org.eclipse.swt.graphics :包含针对图片、光标、字体或绘图API。比如,可通过Image类调用系统中不同类型的图片文件。

6.org.eclipse.swt.ole.win32 :对不同平台,SWT有一些针对性的API。例如在Windows平台可以通过此包很容易的调用OLE组件,这使得SWT程序也可以内嵌IE浏览器或Word、Excel等程序。

二、控件及布局

SWT提供菜单menu、工具栏toolbar、下拉菜单、按钮(Button类)、标签(Label类)、文本框(Text类)、下拉框(Combo类)、列表框(List类)等。

为了说明问题,下面给出一个简单的button程序,其他的控件使用大体如此:

package com.abc.util;
import org.eclipse.swt.*;
import org.eclipse.swt.widgets.*;
public class SWT{
public static void main(String[] args){
Display display = new Display();
Shell shell = new Shell(display); //shell为程序主窗体
//shell.setLayout(null); //设置shell布局方式
shell.setText(“按钮”); //设置主窗体标题
Button btn1 = new Button(shell, SWT.NULL); //创建默认按钮
btn1.setText(“Button1”);
btn1.setBounds(10, 10, 75, 30);
Button btn2 = new Button(shell, SWT.PUSH|SWT.BORDER);
btn2.setText(“Button2”);
btn2.setBounds(90, 10, 75, 30);
// 为Button的时间定义监听器
button.addSelectionListener(new SelectionAdapter(){
public void widgetSelected(SelectionEventarg0) {
MessageBox messageBox = new MessageBox(shell, SWT.OK | SWT.ICON_INFORMATION | SWT.APPLICATION_MODAL);
messageBox.setMessage("按下了(" + button.getText() + ")按钮");
messageBox.open();
}
});
shell.pack(); //自动调整主窗体大小
shell.open(); //打开主窗体
while(!shell.isDisposed()){ //如果主窗体没有关闭
if(!display.readAndDispatch()){ //如果display不忙
display.sleep(); //休眠
}
//释放display对象
display.dispose();
}
}
}

三、事件响应机制

1.eclipse RCP开发事件响应机制是通过声明command组件来实现,其把UI中菜单、按钮并与事件响应函数或类关联起来。举个例子,关联就是把toolbar下新建一个command(附属comand),然后把附属command的Id改为rcpprojiect.commands.Translator,command通过ID相关联。command里会定义Handler.java类,这里就是处理事件的类了,这个在具体后面插件开发步骤里再根据依赖结构详细写。

2.command组件在plugin.xml中以org.eclipse.ui.commands作为扩展点

3.一个事件响应的基本过程,需要3个方面:(1)UI;(2)Command组件;(3)事件处理函数;

【eclipse插件开发实战】Eclipse插件开发2——SWT的更多相关文章

  1. 【eclipse插件开发实战】Eclipse插件开发3——OSGi、RCP

    Eclipse插件开发实战3--OSGi.RCP 一.OSGi 1. 什么是OSGi框架 OSGi(Open Service Gateway Initiative)框架是运行在JavaVM环境里的服务 ...

  2. 【eclipse插件开发实战】Eclipse插件开发1——eclipse内核结构、扩展点机制

    Eclipse插件开发实战1--eclipse内核结构.扩展点机制 一.前言 本系列总体介绍eclipse插件开发基本理论.插件项目结构及开发步骤,最后再给出两个插件开发实例. 总体安排结构如下: 1 ...

  3. 【eclipse插件开发实战】 Eclipse插件开发6——eclipse在线翻译插件Translator开发实例详解

    Eclipse插件开发6--eclipse在线翻译插件Translator开发实例详解 在上一篇文章中讲到了一个简单的eclipse插件开发实例,主要是对插件工程的基本创建步骤进行了讲解,这篇文章当中 ...

  4. 【eclipse插件开发实战】Eclipse插件开发4——插件JDE、PDE开发方式及plugin.xml配置文件结构

    Eclipse插件开发4--插件JDE.PDE开发方式及plugin.xml配置文件结构 开发方式分为:java开发环境JDE开发插件的方式和插件开发环境PDE开发插件方式. 插件通过添加到预定义的扩 ...

  5. [转]Eclipse插件开发之基础篇(6) SWT简介

    原文地址:http://www.cnblogs.com/liuzhuo/archive/2010/09/01/eclipse_plugin_1_3_1.html SWT(Standard Widget ...

  6. CloudIDE插件开发实战:教你如何调试代码

    摘要:今天我们来重点介绍下CloudIDE插件的调试技巧,在插件开发过程中调试作为重要的问题分析和定位手段能够有效帮助开发者提升插件质量. 今天文章中的样例工程我们继续以上一篇<实战CloudI ...

  7. spring boot插件开发实战和原理

    本文转载自spring boot插件开发实战和原理 实战:编写spring boot插件 为什么要编写boot插件 因为我们在开发的时候需要提供一些共同的功能,所以我们编写个共同的jar包.开发人员在 ...

  8. Eclipse IDE for Java EE Developers 与 Eclipse Classic(Eclipse Standard)区别

    Eclipse下载官网:http://www.eclipse.org/downloads/ 版本: 1.Eclipse classic(Eclipse Standard):Eclipse的标准版; 2 ...

  9. 【环境配置】Linux环境下下载、配置java环境、安装eclipse、建立eclipse快捷方式详解

    一.首先是下载Java JDK 到目前为止的最新版本为(jdk1.8.0_60),有两种方式进行下载: 1.使用shell来进行下载,可使用如下命令直接进行下载: wget --no-check-ce ...

随机推荐

  1. shell tr命令的使用

    http://fyan.iteye.com/blog/1172279 tr是translate的简写,亦即翻译,但是遗憾的是,它不能翻译句子,只能翻译单个字符. 1 tr的工作原理是什么? 先记住一点 ...

  2. 微信小程序首页index.js获取不到app.js中动态设置的globalData的原因以及解决方法

    前段时间开发了一款微信小程序,运行了也几个月了,在index.js中的onLoad生命周期里获取app.js中onLaunch生命周期中在接口里动态设置的globalData一直没有问题,结果昨天就获 ...

  3. [Phoenix] 七、如何使用自增ID

    摘要: 在传统关系型数据库中设计主键时,自增ID经常被使用.不仅能够保证主键的唯一,同时也能简化业务层实现.Phoenix怎么使用自增ID,是我们这篇文章的重点. 在传统关系型数据库中设计主键时,自增 ...

  4. bootstrap-table 行内编辑

    1.文件引入 <link rel="stylesheet" href="bootstrap.css"> <link rel="sty ...

  5. c# vs2010 连接access数据库

    第一次在博客园写博文,由于文采不怎么好,即使是自己很熟悉的东西,写起来也会感觉到不知从何讲起,我想写的多了就好了. 这篇文章主要是介绍怎么用c# 语言 vs2010连接access数据库的,连接字符串 ...

  6. BNUOJ 34978 汉诺塔 (概率dp)

    题目分析:对于 i 个盘 , 须要移动多少步,取决于最大的盘子在哪个杆上.在C杆上,则最大的盘不须要移动,由于初始状态一定是满足盘由下到上盘子依次变小的,仅仅须要移动i - 1个盘.假设在A杆上,则首 ...

  7. KeyChain相关参数的说明

    #pragma mark- 密钥类型 //密钥类型键 //CFTypeRef kSecClass // //值 //CFTypeRef kSecClassGenericPassword         ...

  8. jstat监控gc情况

    jstat监控gc情况 JavaJVMJ2SE应用服务器SUN  性能测试过程中,我们该如何监控java虚拟机内存的使用情况,用以判断JVM是否存在内存问题呢?如何判断JVM垃圾回收是否正常?一般的t ...

  9. 使用doctrine的内存耗尽解决办法

    PHP Fatal error: Allowed memory size of xxx xxx xxx bytes exhausted 无论是插入大量数据或者查询大量数据时,都可能因为数据量太大而出现 ...

  10. 如何把wecenter的推荐的问题模块单独调取出来?

    查阅文档: http://wenda.wecenter.com/question/1893 http://www.zhidiu.com/article/1012 http://wenda.wecent ...