根据前两篇博文,应该对插件开发有所了解。

前文回顾:

插件学习篇

简单的建立插件工程以及模型文件分析

利用扩展点,开发透视图

  SWT知识介绍

  之前学过Java的朋友,多少页会一些关于Swing的东西。那么这里的SWT就是Eclipse插件所应用到的小部件开发框架。

  里面包含了大量的桌面控件,并且进行了一系列的优化整合,相对于Swing,极大的减少了内存的消耗。而且关于资源的释放也需要开发者注意,需要特定的手动删除,但是比如一个部件的子部件会随着该部件的销毁而销毁。

  下面看一下开发中常用的一些部件模型,这里介绍的并不全,小控件其实有很多很多,这里就简单的介绍几种:

  

  这里Widget是一个超类,所有的部件都继承与这个类。它也提供了一些常用的方法,比如添加一些监听,获取常用的信息等等。

  最常用的还要数Control了,因为很多Button Label控件都是继承这个类,在开发中经常使用的方法就是

  addMouseListener()进行鼠标点击的监听

  setBounds 进行控件的重新绘制

  等等。具体的函数,大家可以通过开发多留意一下,就行了。

  关于SWT里面Display与Shell之间的关系

  Eclipse插件开发的程序大多有个不成文的规定,一个程序活动期间,只能有一个Dispaly对象,但是可以有多个Shell对象。那么,什么是Dispaly,什么又是Shell呢。

  

  这里红色箭头显示的就是一个Display,也就是一个底层的应用实例。如果这个实例没有被销毁,而程序意外停止了,那么是不能重新运行的。也就是说,运行期间,一个应用程序,只能有一个Display。就像显示器与窗口内的内容,只有一个显示器,但是显示器内部可以显示多个文件内容。

  绿色箭头对应的就是Shell,一个Shell相当于一个活动的窗口,可以在里面添加各种小部件,组成一个丰富的应用界面。

  综上,一个Display可以有多个Shell,但是只有一个Display(适用于普通情况).!

  在Main中启动开发界面

  接下来介绍一下如何不启动一个Eclipse 插件工程,来开发SWT。这个过程很多教材上都有描述,因此这里只提供了上面例子所对应的代码。

  要注意的是,最后要释放资源,Shell是挂载到Dispaly上面(原谅我用挂载这个词,Linux里面挂载比较生动),因此销毁Display的时候,可以自动的销毁Shell对象。但是Color并不是通过挂载方式创建的,因此要独立的释放。

 package com.xingoo.plugin.swttest;

 import javax.swing.Scrollable;
import javax.swing.text.StyleConstants.ColorConstants; import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text; public class mainTestExample {
public static void main(String[] args) {
Display display = new Display();
Color color = new Color(display,,,); //create a shell
Shell shell_1 = new Shell(display);
shell_1.setText("This is a shell in main function()");
shell_1.setBounds(,,,);
shell_1.setLayout(new FillLayout()); Label label_1 = new Label(shell_1,SWT.CENTER);
label_1.setText("this is the text of a label");
label_1.setForeground(color); shell_1.open();
Text test;
//create another shell
Shell shell_2 = new Shell(display);
shell_2.setText("This is a shell1 in main function()");
shell_2.setBounds(,,,);
shell_2.setLayout(new FillLayout()); Label label_2 = new Label(shell_2,SWT.CENTER);
label_2.setText("this is the text of a label1");
label_2.setForeground(color); shell_2.open(); while(!shell_1.isDisposed() || !shell_2.isDisposed()){
if(!display.readAndDispatch())
display.sleep();
} //dispose the resource
display.beep();
color.dispose();
display.dispose();
}
}

  这个函数代码在一般 工程 里面就可以运行,但是缺少一个Jar包,swt的jar包,这个jar包在Eclipse的plugins文件夹下就可以找到。可以通过引入的方式,引入到工程中。

  其实只需要swtx86这个jar包就可以了,source是源代码,可以让我跟踪调试swt的源码。

便于继承的窗口抽象类

  为了后面的测试使用,这里可以把这段代码进行提取。这样之后的main函数的类只要继承这个AbstractExample就可以进行窗口的编辑了。

 package com.xingoo.plugin.swttest;

 import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell; abstract class AbstractExample{
public void run(){
Display display = new Display();
Shell shell = new Shell(display);
shell.setText("shell example");
shell.setBounds(,,,);
shell.setLayout(new FillLayout());
todo(shell);
shell.open(); while(!shell.isDisposed()){
if(!display.readAndDispatch())
display.sleep();
}
//dispose the resource
display.beep();
display.dispose();
}
public abstract void todo(Shell shell);//extension something here
} public class mainTestExample extends AbstractExample{
public static void main(String[] args) {
new mainTestExample().run();
} public void todo(Shell shell) {
//...add something you like
Label label_1 = new Label(shell,SWT.CENTER);
label_1.setText("this is the text of a label");
}
}

  

【插件开发】—— 4 SWT编程须知的更多相关文章

  1. Java SWT编程基础

    SWT常用组件列表及使用 https://blog.csdn.net/u013310025/article/details/52939452 SWT编程基础-控件和图形资源 https://blog. ...

  2. 使用Eclipse进行SWT编程

    使用Eclipse进行SWT编程 1. 为什么要使用SWT? SWT是IBM开发一套跨平台的GUI开发框架.为什么IBM要创建另一种GUI呢?为什么他们不使用现有的JavaGUI框架呢?要回答这些问题 ...

  3. 【eclipse插件开发实战】Eclipse插件开发2——SWT

    Eclipse插件开发实战2--SWT 一.SWT简介 SWT(StandardWidget Toolkit) 标准小窗口工具箱,一开源的GUI编程框架,与AWT/Swing有相似的用处,eclips ...

  4. eclipse Swt编程—窗口小部件widget

    1.标签Label // 标签(Label类)组件是SWT中最简单的组件.Label类的构造方法和格式如下: // Label(Composite parent,

  5. 【插件开发】—— 7 SWT布局详解,不能再详细了!

    前文回顾: 1 插件学习篇 2 简单的建立插件工程以及模型文件分析 3 利用扩展点,开发透视图 4 SWT编程须知 5 SWT简单控件的使用与布局搭配 6 SWT复杂空间与布局搭配 前面几篇都提到了S ...

  6. 【插件开发】—— 6 SWT 复杂控件使用以及布局

    前文回顾: 1 插件学习篇 2 简单的建立插件工程以及模型文件分析 3 利用扩展点,开发透视图 4 SWT编程须知 5 SWT简单控件的使用与布局搭配 前几篇讲到了简单控件的使用,复杂控件使用原则上与 ...

  7. 【插件开发】—— 5 SWT控件以及布局使用

    前文回顾: 1 插件学习篇 2 简单的建立插件工程以及模型文件分析 3 利用扩展点,开发透视图 4 SWT编程须知 经过前几篇的介绍,多少对SWT又有了一些认识,那么这篇继续来看一下一些控件的组合使用 ...

  8. 【插件开发】—— 12 GEF入门

    介绍 前面也简单的介绍了一下插件开发的相关知识,下面主要就介绍一下GEF的相关使用.由于最近使用到编辑器这部分的操作,因此就跳过其他的内容,先介绍下GEF的相关知识. 前文回顾 1 插件学习篇 2 简 ...

  9. 【插件开发】—— 11 窃听风云(Java事件监听原理-GEF实例讲解)

    前文回顾: 1 插件学习篇 2 简单的建立插件工程以及模型文件分析 3 利用扩展点,开发透视图 4 SWT编程须知 5 SWT简单控件的使用与布局搭配 6 SWT复杂空间与布局搭配 7 SWT布局详解 ...

随机推荐

  1. Visual Studio 2017 RC的坑

    ASP.NET Core Project add Docker Project Support的问题 执行上面操作以后,如果本机没有装好docker,就会一直报错,无法build通过,无论你在Proj ...

  2. 一份关于webpack2和模块打包的新手指南(二)

    插件 我们已经看到一个内置的webpack插件的例子,在npm run build脚本中调用的webpack -p命令就是使用webpack附带的UglifyJsPlugin插件以生产模式压缩打包文件 ...

  3. Java的finally语句在try或catch中的return语句执行之后还是之前?

    import java.util.HashMap; import java.util.Map; public class FinallyDemo1 { public static void main( ...

  4. google官方建议使用的网站性能测试工具

    转自:http://www.laokboke.net/2013/05/12/google-official-recommended-site-performance-testing-tools/ 最近 ...

  5. LoadRunner关联需要转义的常见字符

    转义字符总结 在做手动关联时,取边界值的时候,会经常用到转义字符,现将转义字符整理如下: \b 退格             \f 换页             \n 换行             \ ...

  6. leetcode:238. Product of Array Except Self(Java)解答

    转载请注明出处:z_zhaojun的博客 原文地址 题目地址 Product of Array Except Self Given an array of n integers where n > ...

  7. Linux——系统调用笔记1

    底层文件访问:    进程:运行中的程序,它有一些与值关联的文件描述符,有多少个文件描述符取决于系统配置情况.    当一个程序开始运行时,一般会打开三个文件描述符:        0:标准输入    ...

  8. 关于集成支付宝SDK的开发

    下载 首先,你要想找到这个SDK,都得费点功夫.如今的SDK改名叫移动支付集成开发包了,下载页面在 这里 的 "请点此下载集成开发包" Baidu和Googlep排在前面的支付宝开 ...

  9. Oracle可插拔数据库的jdbc连接串写法

    我在服务器上部署某个第三方系统的数据库的时候,服务器数据库版本为oracle 12c.我采用的方式是新建了一个实例.访问正常. 后来项目的负责人告诉我,oracle12C支持所谓的可插拔数据库.可插拔 ...

  10. 不等式数列 DP

    度度熊最近对全排列特别感兴趣,对于1到n的一个排列,度度熊发现可以在中间根据大小关系插入合适的大于和小于符号(即 '>' 和 '<' )使其成为一个合法的不等式数列.但是现在度度熊手中只有 ...