上面有讲ChinaEditor类继承EditorPart抽象类时,只实现了init,createPartControl两个方法,本节将逐步讲解其他的5个方法的用法.

EditorPart方法的执行情况.

要使用好EditorPart,首先得了解其方法在各种情况下的执行流程,在类的每一个方法中加上一个打印语句.运行后看打印输出,就可以得到如下方法执行流程.

(1)双击列表项打开编辑器时

init--->isDirty--->createPartContorl--->isDirty--->isDirty--->isDirty--->isDirty--->isDirty--->setFocus--->isDirty--->isSaveAsAllowed.

(2)关闭编辑器时,setFocus--->isDirty--->isSaveAsAllowed--->isDirty--->isSaveAsAllowed--->setFocus--->isDirty如果保存保存编辑器,则最后还会执行doSave()方法.

(3)单击编辑器标题时:setFocus

(4)编辑器失去焦点时:isDirty--->isSavedAsAllowed--->isDirty----->isSaveASAllowed.

(5)编辑器得到焦点时:setFocus---->isDirty---->isSaveAsAllowed---->isDirty----->isSaveAsAllowed.

(6)当编辑器可以保存,选择主菜单"文件--->保存"或按Ctrl+S快捷键时:isDirty--->doSave.

各个方法的作用以及含义:

1.boolean isDirty()

由此方法获知编辑器是否脏了(所谓"脏"是指编辑器中的值已经发生了改变),true表示脏了,当其返回true时,会出现两个效果:编辑器的标题出现一个"*"号,主菜单"文件"下的"保存"项可用.

特别要注意的是:编辑器不会自己判断自己是否脏了,这需要在程序中用语句手动设置,例如:在编辑器的文本框加入一个键盘监听事件,当在文本框中输入字符时,则将isDirty方法返回值设置为true(脏).

在方法执行的过程中,可以看到此方法的执行是最频繁的,所以不要在此方法中加入太耗时的执行语句.否则会影响程序执行速度.

2.void doSave()

在这个方法中编写保存编辑器的代码,当选择主菜单"文件---->保存"时也会执行此方法.但因在isDirty返回true时,"保存"菜单和Ctrl+S快捷键才能用,也即isDirty方法控制着doSave方法的执行.

当保存成功时,要注意将脏的状态设置回false,并调用firePropertyChange方法将编辑器的界面状态更新(编辑器标题前的"*"号以及"保存"菜单).

3.boolean isSaveAsAllowed()

是否允许编辑器使用"另存为"功能,如果此返回false,则不能使用"另存为"功能,而且主菜单"文件"下的"另存为"项被置灰.

4.void doSaveAs()

和doSave的作用相似,在这里书写"另存为"功能的处理代码.

5.void setFocus()

当编辑器获得焦点时执行该方法.

一个编辑器实例

在本例子中,当修改ChinaEditor编辑器中文本框的文字时候,编辑器标题前出现"*"而且主菜单"文件---->保存"可用,当编辑器保存后,"*"消失并且"保存"菜单不可用,当编辑器为脏时,关闭编辑器会弹出一个提示保存的对话框.

ChinaEditor.java(前面的我贴的代码就是全部的,这里再贴 一遍)

 public class ChinaEditor extends EditorPart {
private boolean dirty = true; // 编辑器是否为脏的标识 // Editor的初始化方法。本方法前两句是固定不变的
public void init(IEditorSite site, IEditorInput input) throws PartInitException {
System.out.println("init");
setSite(site);
setInput(input);
// 下一句设置Editor标题栏的显示名称,否则名称用plugin.xml中的name属性
// setPartName(input.getName());
// 下一句设置Editor标题栏的图标,否则会自动使用一个默认的图标
// setTitleImage(input.getImageDescriptor().createImage());
} // 在此方法中创建Editor中的界面组件
public void createPartControl(Composite parent) {
System.out.println("createPartControl");
Composite topComp = new Composite(parent, SWT.NONE);
topComp.setLayout(new FillLayout());
Text text = new Text(topComp, SWT.BORDER);
text.setText("中国之编辑器"); text.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
// 如果编辑器不脏(即没有修改),则标志它脏并刷新界面状态
if (!isDirty()) {
setDirty(true);
firePropertyChange(IEditorPart.PROP_DIRTY);
}
}
});
} // 保存的处理代码在这种方法中,当按Ctrl+S键时会执行此方法。
// 最后别忘记标志为非脏及刷新界面状态
public void doSave(IProgressMonitor monitor) {
if (isDirty()) {
// ……保存编辑器事件处理代码(省略)
setDirty(false);
firePropertyChange(IEditorPart.PROP_DIRTY);
}
} // 是否允许“另存为”,false不允许
public boolean isSaveAsAllowed() {
return false;
} // “另存为”的代码写在这里,本例不实现它
public void doSaveAs() {} // dirty标识的set方法,由此方法设置编辑器为脏
public void setDirty(boolean dirty) {
this.dirty = dirty;
} // 编辑器的内容是否脏了。true脏,false不脏
public boolean isDirty() {
return dirty;
} // 当编辑器获得焦点时会执行此方法,本例空实现
public void setFocus() {}
}

程序说明:firePropertyChange(IEditorPart.PROP_DIRTY)这一句除了能将界面状态刷新之外,如果IEditorPart对象添加了如下监听器,则还可以触发其中的propertyChange事件.

chinaEditor.addPropertyListener(new IPropertyListener(){

  //此时source为ChinaEditor对象,propId为IEditorPart.PROP_DIRTY这个常量值

  public void propertyChanged(Object source,int propId){

    //......事件处理代码,这里省略

  }

})

关于Eclipse插件开发(五)-----编辑器类方法的使用说明的更多相关文章

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

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

  2. Eclipse插件开发中对于Jar包和类文件引用的处理(彻底解决插件开发中的NoClassDefFoundError问题)(转)

    目的:Eclipse插件开发中,经常要引用第三方包或者是引用其他插件中的类,由于插件开发环境引用类路径的设置和运行平台引用类路径的设置不同,经常导致开发过程OK,一旦运行则出现NoClassDefFo ...

  3. 【插件开发】—— 1 Eclipse插件开发导盲

    [插件开发]—— 1 Eclipse插件开发导盲   在真正接触eclipse插件开发一个月后,对插件的开发过程以及技术要求,也有了一定的了解.遥想之前像无头苍蝇一样乱撞乱学,真心觉得浪费了不少时间. ...

  4. Eclipse 插件开发 -- 深入理解菜单(Menu)功能及其扩展点( FROM IBM)

    Eclipse 插件开发 -- 深入理解菜单(Menu)功能及其扩展点 菜单是各种软件及开发平台会提供的必备功能,Eclipse 也不例外,提供了丰富的菜单,包括主菜单(Main Menu),视图 / ...

  5. Eclipse插件开发_异常_01_java.lang.RuntimeException: No application id has been found.

    一.异常现象 在运行RCP程序时,出现 java.lang.RuntimeException: No application id has been found. at org.eclipse.equ ...

  6. Eclipse插件开发 学习笔记 PDF 第一篇到第四篇 免分下载 开发基础 核心技术 高级进阶 综合实例

    <<Eclipse插件开发 学习笔记>>,本书由浅入深.有重点.有针对性地介绍了Eclipse插件开发技术,全书分为4篇共24章.第一篇介绍Eclipse平台界面开发的基础知识 ...

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

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

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

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

  9. (地址)eclipse插件开发攻略的访问地址

    园子地址: http://www.cnblogs.com/liuzhuo/category/257208.html 关键字: Eclipse插件开发彻底攻略 eclipse插件开发基础篇之

随机推荐

  1. tomcat 容器中的UML架构图

  2. android学习之activity

    Activity 的生命周期 和 J2ME 的 MIDlet 一样,在 android 中,Activity 的生命周期交给系统统一管理.与 MIDlet 不同的是安装在 android 中的所有的 ...

  3. 矩阵取数游戏 NOIP 2007

    2016-05-31 17:26:45 题目链接: NOIP 2007 矩阵取数游戏(Codevs) 题目大意: 给定一个矩阵,每次在每一行的行首或者行尾取一个数乘上2^次数,求取完最多获得的分数 解 ...

  4. leetcode@ [241] Different Ways to Add Parentheses (Divide and Conquer)

    https://leetcode.com/problems/different-ways-to-add-parentheses/ Given a string of numbers and opera ...

  5. Bzoj-2005 能量采集 gcd,递推

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2005 题意:题目转换后的模型就是求Σ(gcd(x,y)), 1<=x<=n, ...

  6. linux内存负载分析

    衡量内存负载的一个很重要的指标就是页面置换的频率.当linux系统频繁的对页进行换进换出 的时候,说明物理内存不过,不得不进行频繁的置换页面. 使用vmstat(virtual memory stat ...

  7. 集合框架工具类--Collections排序

    package ToolCollectionsDemo; import java.util.ArrayList; import java.util.Collections; import java.u ...

  8. Android实例-从照相机或图库获取照片(XE8+小米2)

    结果: 1.如果要取本地相册的话,小米手机要注意一下,不能取网络相册. 操作: 1.两个 TButton (Button1 和 Button2) , 一个 TActionList(ActionList ...

  9. 常用的各种标准下载网站(HB GB GJB MH)

    标准分享网 http://www.bzfxw.com/ 标准下载网 http://www.bzxz.net/ 搜标准网   http://www.biaozhunw.com/Index.html 标准 ...

  10. hdu 5585 Numbers【大数+同余定理】

    Numbers Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Sub ...