编辑器类方法的使用说明

简介:

上面有讲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(前面的我贴的代码就是全部的,这里再贴 一遍)

复制代码
 1 public class ChinaEditor extends EditorPart {
 2     private boolean dirty = true; // 编辑器是否为脏的标识
 3 
 4     // Editor的初始化方法。本方法前两句是固定不变的
 5     public void init(IEditorSite site, IEditorInput input) throws PartInitException {
 6         System.out.println("init");
 7         setSite(site);
 8         setInput(input);
 9         // 下一句设置Editor标题栏的显示名称,否则名称用plugin.xml中的name属性
10         // setPartName(input.getName());
11         // 下一句设置Editor标题栏的图标,否则会自动使用一个默认的图标
12         // setTitleImage(input.getImageDescriptor().createImage());
13     }
14 
15     // 在此方法中创建Editor中的界面组件
16     public void createPartControl(Composite parent) {
17         System.out.println("createPartControl");
18         Composite topComp = new Composite(parent, SWT.NONE);
19         topComp.setLayout(new FillLayout());
20         Text text = new Text(topComp, SWT.BORDER);
21         text.setText("中国之编辑器");
22 
23         text.addKeyListener(new KeyAdapter() {
24             public void keyPressed(KeyEvent e) {
25                 // 如果编辑器不脏(即没有修改),则标志它脏并刷新界面状态
26                 if (!isDirty()) {
27                     setDirty(true);
28                     firePropertyChange(IEditorPart.PROP_DIRTY);
29                 }
30             }
31         });
32     }
33 
34     // 保存的处理代码在这种方法中,当按Ctrl+S键时会执行此方法。
35     // 最后别忘记标志为非脏及刷新界面状态
36     public void doSave(IProgressMonitor monitor) {
37         if (isDirty()) {
38             // ……保存编辑器事件处理代码(省略)
39             setDirty(false);
40             firePropertyChange(IEditorPart.PROP_DIRTY);
41         }
42     }
43 
44     // 是否允许“另存为”,false不允许
45     public boolean isSaveAsAllowed() {
46         return false;
47     }
48 
49     // “另存为”的代码写在这里,本例不实现它
50     public void doSaveAs() {}
51 
52     // dirty标识的set方法,由此方法设置编辑器为脏
53     public void setDirty(boolean dirty) {
54         this.dirty = dirty;
55     }
56 
57     // 编辑器的内容是否脏了。true脏,false不脏
58     public boolean isDirty() {
59         return dirty;
60     }
61 
62     // 当编辑器获得焦点时会执行此方法,本例空实现
63     public void setFocus() {}
64 }
复制代码

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

chinaEditor.addPropertyListener(new IPropertyListener(){

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

  public void propertyChanged(Object source,int propId){

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

  }

})

 


本文转自SummerChill博客园博客,原文链接:http://www.cnblogs.com/DreamDrive/p/4175754.html,如需转载请自行联系原作者

相关文章
|
6月前
|
Java
【学习记录】IDEA编辑器 - 类、方法模板配置
【学习记录】IDEA编辑器 - 类、方法模板配置
81 0
【学习记录】IDEA编辑器 - 类、方法模板配置
|
前端开发 C# 开发工具
Unity快手上手【熟悉unity编辑器,C#脚本控制组件一些属性之类的】
Unity快手上手【熟悉unity编辑器,C#脚本控制组件一些属性之类的】
153 0
|
Web App开发 JavaScript 前端开发
百度Web富文本编辑器ueditor在ASP.NET MVC3项目中的使用说明
======================================================================   【百度Web富文本编辑器ueditor在ASP.
2291 0
|
6月前
|
存储 Linux 编译器
vim编辑器和gcc/g++编辑器的使用讲解
vim编辑器和gcc/g++编辑器的使用讲解
148 2
|
4月前
|
开发工具
vi编辑器,现在vi\vim是文本文件进行编辑的最佳选择,Vim是vi的加强的版本,兼容vi的所有指令,vim编辑器有三种工作模式,一开始进入的是命令模式,命令模式i是插入的意思,两下y+p复制内容
vi编辑器,现在vi\vim是文本文件进行编辑的最佳选择,Vim是vi的加强的版本,兼容vi的所有指令,vim编辑器有三种工作模式,一开始进入的是命令模式,命令模式i是插入的意思,两下y+p复制内容
|
5月前
|
开发工具
Vim 编辑器:高效文本编辑的瑞士军刀
**Vim 概览:** Vim 是一个功能丰富的文本编辑器,以其高度可定制性著称。文章介绍了 Vim 的高效使用技巧,包括快捷打开文件、命令行模式下的常用命令、查找与替换、删除和复制文本。还讨论了配置 `.vimrc` 文件以自定义设置,如改变 leader 键、设置缩进和高亮,并展示了安装插件如 vim-airline 和 vim-snazzy 的方法。通过这些技巧,用户能提升 Vim 使用效率。
62 5
|
5月前
|
Ubuntu 搜索推荐 Linux
Linux的Vim编辑器详解
Linux的Vim编辑器详解
|
4月前
|
Linux 开发工具 数据安全/隐私保护
【linux】如何优雅的使用vim编辑器
【linux】如何优雅的使用vim编辑器
|
5月前
|
缓存 人工智能 Linux
【Linux】--- 详解Linux软件包管理器yum和编辑器vim
【Linux】--- 详解Linux软件包管理器yum和编辑器vim
90 0