【插件开发】—— 4 SWT编程须知

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

前文回顾:

插件学习篇

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

利用扩展点,开发透视图

  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并不是通过挂载方式创建的,因此要独立的释放。

 1 package com.xingoo.plugin.swttest;
 2
 3 import javax.swing.Scrollable;
 4 import javax.swing.text.StyleConstants.ColorConstants;
 5
 6 import org.eclipse.swt.SWT;
 7 import org.eclipse.swt.graphics.Color;
 8 import org.eclipse.swt.layout.FillLayout;
 9 import org.eclipse.swt.widgets.Display;
10 import org.eclipse.swt.widgets.Label;
11 import org.eclipse.swt.widgets.Shell;
12 import org.eclipse.swt.widgets.Text;
13
14 public class mainTestExample {
15     public static void main(String[] args) {
16         Display display = new Display();
17         Color color =  new Color(display,255,0,0);
18
19         //create a shell
20         Shell shell_1 = new Shell(display);
21         shell_1.setText("This is a shell in main function()");
22         shell_1.setBounds(100,100,400,200);
23         shell_1.setLayout(new FillLayout());
24
25         Label label_1 = new Label(shell_1,SWT.CENTER);
26         label_1.setText("this is the text of a label");
27         label_1.setForeground(color);
28
29         shell_1.open();
30         Text test;
31         //create another shell
32         Shell shell_2 = new Shell(display);
33         shell_2.setText("This is a shell1 in main function()");
34         shell_2.setBounds(250,250,400,200);
35         shell_2.setLayout(new FillLayout());
36
37         Label label_2 = new Label(shell_2,SWT.CENTER);
38         label_2.setText("this is the text of a label1");
39         label_2.setForeground(color);
40
41         shell_2.open();
42
43         while(!shell_1.isDisposed() || !shell_2.isDisposed()){
44             if(!display.readAndDispatch())
45                 display.sleep();
46         }
47
48         //dispose the resource
49         display.beep();
50         color.dispose();
51         display.dispose();
52     }
53 }

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

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

便于继承的窗口抽象类

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

 1 package com.xingoo.plugin.swttest;
 2
 3 import org.eclipse.swt.SWT;
 4 import org.eclipse.swt.layout.FillLayout;
 5 import org.eclipse.swt.widgets.Display;
 6 import org.eclipse.swt.widgets.Label;
 7 import org.eclipse.swt.widgets.Shell;
 8
 9 abstract class AbstractExample{
10     public void run(){
11         Display display = new Display();
12         Shell shell = new Shell(display);
13         shell.setText("shell example");
14         shell.setBounds(100,100,400,200);
15         shell.setLayout(new FillLayout());
16         todo(shell);
17         shell.open();
18
19         while(!shell.isDisposed()){
20             if(!display.readAndDispatch())
21                 display.sleep();
22         }
23         //dispose the resource
24         display.beep();
25         display.dispose();
26     }
27     public abstract void todo(Shell shell);//extension something here
28 }
29
30 public class mainTestExample extends AbstractExample{
31     public static void main(String[] args) {
32         new mainTestExample().run();
33     }
34
35     public void todo(Shell shell) {
36         //...add something you like
37         Label label_1 = new Label(shell,SWT.CENTER);
38         label_1.setText("this is the text of a label");
39     }
40 }

  

时间: 2024-10-18 13:41:18

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

Java SWT编程基础

SWT常用组件列表及使用 https://blog.csdn.net/u013310025/article/details/52939452 SWT编程基础-控件和图形资源 https://blog.csdn.net/jianggujin/article/details/51302554 原文地址:https://www.cnblogs.com/jiftle/p/9647459.html

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

前文回顾: 1 插件学习篇 2 简单的建立插件工程以及模型文件分析 3 利用扩展点,开发透视图 4 SWT编程须知 5 SWT简单控件的使用与布局搭配 6 SWT复杂空间与布局搭配 前面几篇都提到了SWT的布局,布局系统也为规整的UI提供了保障.那么如何设计一个布局呢? Eclipse的布局机制,提供了两个对象概念,Layout(描述内部布局方式)以及GridData(描述本身布局方式). 什么是Layout? 首先说一下Layout,layout定义了一个空间内部的布局格式.比如我们把箱子作为

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

前文回顾: 1 插件学习篇 2 简单的建立插件工程以及模型文件分析 3 利用扩展点,开发透视图 4 SWT编程须知 5 SWT简单控件的使用与布局搭配 前几篇讲到了简单控件的使用,复杂控件使用原则上与简单控件差不多,不过数据的使用还有一些布局还有些额外的技巧. 成果展示:      这里介绍下Tab页,列表,以及树的使用. Tab页 这个tab页仍然采用SWT控件的一贯作风,子页都以挂载的方式连接到Tab容器上,但是需要使用一个组个对象才能在里面放置内容,并不支持直接进行布局. TabFolde

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

前文回顾: 1 插件学习篇 2 简单的建立插件工程以及模型文件分析 3 利用扩展点,开发透视图 4 SWT编程须知 经过前几篇的介绍,多少对SWT又有了一些认识,那么这篇继续来看一下一些控件的组合使用. 首先是几种简单的控件,Label,Text,Button,Combo这些都是些常用的简单框架,但是为了能够构造出整齐的布局,还是要多花些心思的. 除了这些简单的控件外,还有点复杂的控件,比如Table和树.选项卡和菜单等等,这里就先不做介绍了. 为了整个这些控件,经常要使用两个组合控件以及多种布

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

前文回顾: 1 插件学习篇 2 简单的建立插件工程以及模型文件分析 3 利用扩展点,开发透视图 4 SWT编程须知 5 SWT简单控件的使用与布局搭配 6 SWT复杂空间与布局搭配 7 SWT布局详解 8 IPreferenceStore使用详解 9 编辑器代码着色 10 JFace开发 事件的监听,是插件开发中的重要环节,每一次的点击或者按键都有可能触发某种事件的响应,那么是如何实现的呢? 对于某种被监听模型,通常需要添加一个监听队列. 监听者需要通过某种方式,加入到这个监听队列中. 当这个模

【插件开发】—— 10 JFace开发详解

前文回顾: 1 插件学习篇 2 简单的建立插件工程以及模型文件分析 3 利用扩展点,开发透视图 4 SWT编程须知 5 SWT简单控件的使用与布局搭配 6 SWT复杂空间与布局搭配 7 SWT布局详解 8 IPreferenceStore使用详解 9 编辑器代码着色 前几篇讲过SWT的使用,但是SWT是基本的小控件,只能针对使用简单的数据类型,比如字符串,数字等等.但是遇到了复杂的类,该怎么办呢? 不要担心!这里就可以使用JFace了,它是对SWT的封装,可以应用于复杂的数据类型. 下面的介绍中

【插件开发】—— 8 IPreferenceStore,插件的键/值存储!

前文回顾: 1 插件学习篇 2 简单的建立插件工程以及模型文件分析 3 利用扩展点,开发透视图 4 SWT编程须知 5 SWT简单控件的使用与布局搭配 6 SWT复杂空间与布局搭配 7 SWT布局详解 前几篇讲解了SWT的基本知识.这篇作为穿插,讲述一下工作终于到的一个问题,并且借着这个机会,好好的学习了一下! 先描述下我遇到的问题吧: 由于对插件的了解也并不全面,很多知识点都不知道.学习其他人的开源源码时,我遇到了下面的报错: 1 org.eclipse.jface.resource.Data

【插件开发】—— 9 编辑器代码分块着色-高亮显示!

前文回顾: 1 插件学习篇 2 简单的建立插件工程以及模型文件分析 3 利用扩展点,开发透视图 4 SWT编程须知 5 SWT简单控件的使用与布局搭配 6 SWT复杂空间与布局搭配 7 SWT布局详解 8 IPreferenceStore使用详解 这篇讲解依然是一个重头的技巧,就是[代码的着色].大家在使用各种编辑器的时候都会发现,有些关键词和一些注释之类的都会以不同的颜色进行显示,那么它是怎么做到呢?先看一下示例的运行效果! 凭空思考下: [IO书写]首先这些输入的东西可能是以一些字符串的形式

【插件开发】—— 13 GEF双击模型事件

前文回顾: 1 插件学习篇 2 简单的建立插件工程以及模型文件分析 3 利用扩展点,开发透视图 4 SWT编程须知 5 SWT简单控件的使用与布局搭配 6 SWT复杂空间与布局搭配 7 SWT布局详解 8 IPreferenceStore使用详解 9 编辑器代码着色 10 JFace开发 11 GEF监听 12 GEF入门 由于GEF的架构过于庞大,对于新手来说确实不易.而对于GEF典型的应用场景,模型拖拽编辑,一个常用的操作方式就是双击模型弹出对话框进行编辑.但是由于模型是我们自己定义的,如何