`

多页编辑器

 
阅读更多

      资源里存储了用户需要的信息,而编辑器是用户创建和修改资源最主要的方式,它是eclipse插件开发中最复

杂也是最主要的部分。

 

 

      编辑器必须实现org.eclipse.ui.IEditorPart接口,但通常继承子类org.eclipse.ui.part.EditorPart.

IEditorInput描述了编辑器的数据源。IPathEditorInput描述了数据源的格式,IFileEditorInput描述了基于

本地数据源。

 

      当编辑器被创建后,输入源是通过编辑器的init方法来设定的。可以通过getEditorInput方法来重新获取。

 

      MultiPageEditorPart,多页编辑器,每个页面都包含它自己的编辑器。FormEditor,它继承了MultiPageEditorPart类,用来实现表格编辑器。

 

创建编辑器,首先要在清单文件中声明扩展点,如下所示:

 <extension

         point="org.eclipse.ui.editors">

      <editor

            //与视图一样,一个编辑器对应一个class类,该类必须实现IEditorPart接口

            class="com.plugindev.addressbook.editors.AddressFormEditor"

            //实现了org.eclipse.ui.part.EditorActionBarContributor接口的全权限定名称

            contributorClass="com.plugindev.addressbook.editors.AddressFormEditorContributor"

            default="true"

            //编辑器左上角显示的图像

            icon="icons/editors/editor.gif"

            id="com.plugindev.addressbook.tableEditor"

            name="地址本编辑器"/>

   </extension>

 

 

FormEditor抽象类,提供了抽象方法addPages(),子类必须实现,用与为编辑器添加页面,

 

 

 

 

在打开编辑器时,必须同时制定输入的数据源

 

doubleClickAction = new Action() {

public void run() {

ISelection selection = viewer.getSelection();

AddressItem obj = (AddressItem)((IStructuredSelection)

selection).getFirstElement();

IWorkbenchPage page = PlatformUI.getWorkbench().

getActiveWorkbenchWindow().getActivePage();

try {

SimpleFormEditorInput input = new SimpleFormEditorInput(obj.getName());

page.openEditor(input, "com.plugindev.addressbook.tableEditor");

} catch (PartInitException e) {

System.out.println(e);

}

//为Editor增加的操作

}

};

 

 

org.eclipse.ui.forms.editor.FormEditor

 

在创建表格编辑器时,必须继承FormEditor类,而加入到FormEditor编辑器中的每个页面都必须继承FormPage

类,例如:

 

 

public class PageWithSubPages extends FormPage {

private FormEditor editor;

private CTabFolder tabFolder;

public PageWithSubPages(FormEditor editor) {

super(editor, "pageWithSub", Messages.PAGE_NAME_PAGEWITHSUB); 

this.editor = editor;

}

protected void createFormContent(IManagedForm managedForm) {

ScrolledForm form = managedForm.getForm();

FormToolkit toolkit = managedForm.getToolkit();

form.setText(Messages.PAGE_TITLE_PAGEWITHSUB); 

form.setBackgroundImage(ImageCache.getInstance().getImage

 

(ImageKeys.getImageDescriptor(ImageKeys.IMG_FORM_BG)));

GridLayout layout = new GridLayout();

layout.marginWidth = 10;

form.getBody().setLayout(layout);

tabFolder = new CTabFolder(form.getBody(), SWT.FLAT|SWT.TOP);

toolkit.adapt(tabFolder, true, true);

GridData gd = new GridData(GridData.FILL_HORIZONTAL);

gd.heightHint = 0;

tabFolder.setLayoutData(gd);

Color selectedColor = toolkit.getColors().getColor(FormColors.SEPARATOR);

tabFolder.setSelectionBackground(new Color[] {selectedColor, toolkit.getColors

 

().getBackground()}, new int[] {50});

 

}

}

 

 

 

主/从风格的页面

 

 

       MasterDetailsBlock类采用注册页面的方式来构建主从块,registerPages()方法用来为具体的从属页面注册

所允许的数据模型,从而建立起从属页面和数据模型的一一对应关系。

 

public class MasterDetailsPage extends FormPage {

 

        //该对象代表页面的MasterDetail部分

private ScrolledPropertiesBlock block;

 

public MasterDetailsPage(FormEditor editor) {

super(editor, "masterDetail", Messages.PAGE_NAME_MASTERDETAIL);

block = new ScrolledPropertiesBlock(this);

}

 

protected void createFormContent(final IManagedForm managedForm) {

final ScrolledForm form = managedForm.getForm();

form.setText(Messages.PAGE_TITLE_MASTERDETAIL); 

form.setBackgroundImage(null);

                //该方法非常重要,负责创建Master和Detail区域,尽量在最后调用

block.createContent(managedForm);

}

 

 

public IAction getTableAction(String workbenchActionId) {

return block.getTableAction(workbenchActionId);

}

}

 

具有MasterDetail模式的页面类都要继承自MasterDetailBlock类,并实现该类的3个方法:

1.createMasterPart

在该方法中创建master部分的控件

2.createToolBarActions

创建该页面的工具栏,本例有垂直和水平2个按钮

3.registerPages

注册master对应的detail部分,可以注册多个

 

 

 

public class ScrolledPropertiesBlock extends MasterDetailsBlock {

private FormPage page;

private TableViewer viewer;

private RemoveAddressListAction removeAction;

private Action vaction;

private Action haction;

public ScrolledPropertiesBlock(FormPage page) {

this.page = page;

}

 

protected void createMasterPart(final IManagedForm managedForm,

Composite parent) {

//final ScrolledForm form = managedForm.getForm();

FormToolkit toolkit = managedForm.getToolkit();

Section section = toolkit.createSection(parent, 

 

Section.DESCRIPTION|Section.TITLE_BAR);

section.setText(Messages.SCROL_BLOC_NAME); 

section.setDescription(Messages.SCROL_BLOC_DESCRIP); 

section.marginWidth = 10;

section.marginHeight = 5;

Composite client = toolkit.createComposite(section, SWT.WRAP);

GridLayout layout = new GridLayout();

layout.numColumns = 2;

layout.marginWidth = 2;

layout.marginHeight = 2;

client.setLayout(layout);

Table t = toolkit.createTable(client, SWT.NULL);

GridData gd = new GridData(GridData.FILL_BOTH);

gd.heightHint = 20;

gd.widthHint = 100;

gd.verticalSpan = 2;

t.setLayoutData(gd);

toolkit.paintBordersFor(client);

 

section.setClient(client);

 

                //代表master部分,且把该对象注册到managedForm中

final SectionPart spart = new SectionPart(section);

managedForm.addPart(spart);

viewer = new TableViewer(t);

viewer.addSelectionChangedListener(new ISelectionChangedListener() {

public void selectionChanged(SelectionChangedEvent event) {

                //当选择变化的时候,必须通过managedForm的该方法来发布事件,该事件接受的地方必须

                //在Detail页面进行

managedForm.fireSelectionChanged(spart, event.getSelection());

}

});

viewer.setContentProvider(new MasterContentProvider());

viewer.setLabelProvider(new MasterLabelProvider());

viewer.setInput(page.getEditor().getEditorInput());

      }

 

      protected void registerPages(DetailsPart detailsPart) {

detailsPart.registerPage(BasicAddressList.class, new BasicAddressListProperties());

detailsPart.registerPage(PhoneAddressList.class, new PhoneAddressListItemProperties());

detailsPart.registerPage(AreaAddressList.class, new AreaAddressListProperties());

}

}

 

Detail部分必须实现IDetailPage接口,主要是在createContents方法中创建Detail所需要使用的控件,并且

在selectChanged方法中处理当master对象选中事件发生的代码。

 

 

public class AddressListProperties implements IDetailsPage {

 

public AddressListProperties() {

}

 

public void initialize(IManagedForm mform) {

}

 

public void createContents(Composite parent) {

 

}

protected void createSection(Composite parent,

ArrayList<String> stringKeys, Map<String, Object[]>choiceKeysMap)

{

}

 

       //在此方法中处理mater选择事件

public void selectionChanged(IFormPart part, ISelection selection) {

IStructuredSelection ssel = (IStructuredSelection)selection;

if (ssel.size()==1) {

input = (AddressList)ssel.getFirstElement();

s1.setText(input.getName());

s1.setDescription(input.getDescription());

}

else

input = null;

update();

}

public void commit(boolean onSave) {

}

public void setFocus() {

choices[0][0].setFocus();

}

public void dispose() {

}

public boolean isDirty() {

return false;

}

public boolean isStale() {

return false;

}

public void refresh() {

update();

}

public boolean setFormInput(Object input) {

return false;

}

 

}

分享到:
评论

相关推荐

    tif图片多页面编辑器

    tif图片多页面编辑器

    swing类型多页面文本编辑器java源代码

    Swing类型的多页面文本编辑器是Java编程领域中一个典型的桌面应用示例,它结合了Swing组件和Java丰富的文本处理能力,为用户提供了一个能够同时处理多个文本文档的环境。Swing是Java Foundation Classes (JFC)的一...

    百度编辑器uedtior在一个页面实例化多个以及怎么简化编辑器

    在网页开发中,有时我们需要在同一页面上使用多个富文本编辑器来满足不同的输入需求,比如评论、文章编辑、留言等。百度编辑器(UEditor)是一款功能强大的在线文本编辑器,它提供了丰富的编辑功能和良好的用户体验...

    前端页面编辑器

    在IT行业中,前端页面编辑器是开发者们不可或缺的利器,特别是在Web开发领域。"前端页面编辑器"是一款专为前端工程师设计的高效、强大的代码编辑工具,它支持编写JavaScript(js)、JavaServer Pages(jsp)以及HTML...

    nyfedit5好用的编辑器

    **nyfedit5:一款强大的多页面编辑器** 在IT领域,编辑器是开发者和文本工作者的得力工具,它们提供了高效、便捷的文本处理能力。本文将详细探讨"nyfedit5"这一编辑器,它以其优秀的多页面编辑功能在用户群体中获得...

    Tif文件编辑器v0.6绿色中文免费版多页面TIF文件快速处理工具

    tif文件编辑器是一款多页面TIF文件快速处理工具,对扫描的多页TIF格式文件可进行编辑及格式转换,可以同时处理所有页面、可一次把所有页面导出为单个个图像文件。 基本简介 传真但面对多页格式的TIF文件束手无策吗...

    vue可视化网页编辑器(富文本编辑器)

    5. **状态管理**:由于可视化编辑器可能涉及多个组件间的交互,因此可能需要用到 Vue 的 Vuex 进行全局状态管理,以确保数据的一致性。 6. **rollup.config.js**:这是一个 Rollup 配置文件,Rollup 是一个模块打包...

    JSP页面文本编辑器

    **JSP页面文本编辑器详解** 在Web开发领域,JSP(JavaServer Pages)是一种用于构建动态网页的技术,它允许开发者在HTML代码中嵌入Java代码,以实现服务器端的数据处理和逻辑控制。为了提高开发效率,JSP页面通常会...

    用C#做的多文档编辑器

    在这个多文档编辑器中,每个文档被分配到一个单独的Tab页,用户可以通过点击不同的Tab来切换和编辑不同的文档,类似于浏览器的标签页功能。 2. **图片插入**:编辑器支持插入图片功能,这通常涉及到处理图像文件...

    百科编辑器,编辑器,网页编辑器

    常见的代码编辑器有Visual Studio Code、Sublime Text、Atom等,它们具有语法高亮、自动补全、多文件编辑和版本控制集成等功能,极大地提高了开发效率。 **网页编辑器** 网页编辑器是用于创建和修改HTML、CSS以及...

    ASP在线编辑器,ASP.NET在线编辑器,PHP在线编辑器,JSP在线编辑器.html在线编辑器,在线网页编辑器

    在线编辑器是Web开发中的一种重要工具,它允许用户在浏览器环境下编写、修改和预览代码,无需在本地安装特定的软件。这个压缩包文件可能包含的是关于不同编程语言(如ASP、ASP.NET、PHP、JSP以及HTML)的在线编辑器...

    多文档编辑器 多文档编辑器 多文档编辑器 多文档编辑器

    多文档编辑器是一种高效、强大的文本处理工具,它允许用户同时打开并编辑多个文档,极大地提高了工作效率。在IT行业中,这种类型的编辑器是程序员、文本工作者以及任何需要处理大量文本内容的人的必备工具。本文将...

    jquery页面文本编辑器

    然后,选择一个或多个`textarea`元素,通过jQuery的`.htmlbox()`方法将其转化为HtmlBox编辑器: ```javascript $('textarea').htmlbox(); ``` 三、样式与配置 HtmlBox提供多种预设风格,可以根据网站的设计选择...

    编辑器 asp编辑器

    尽管Dreamweaver等通用编辑器提供了多平台支持和广泛的Web技术覆盖,但专业ASP编辑器的优势在于其对ASP特性的深入理解和优化。它们可能更适合那些专注于ASP开发或者需要更高性能和专业特性的开发者。 总的来说,...

    WIL文件编辑器

    【WIL文件编辑器】 WIL文件编辑器是一款专业用于处理和编辑WIL格式文件的工具。WIL文件,全称可能为Windows Interface Library或Web Interface Language文件,是一种特定的编程语言或数据格式,用于创建和管理应用...

    Aras Innovator AML编辑器

    3. **集成开发环境(IDE)**:如ICSharpCode.TextEditor.dll所示,编辑器可能是一个完整的IDE,支持代码折叠、查找替换、多文档同时编辑等开发者常用功能。 4. **库支持**:IOM.dll可能表示接口对象模型(Interface...

    简单方便的web打印编辑器

    4. 考虑多页打印,通过CSS分页符或JavaScript动态分割内容以避免内容被分割在不同页面上。 在集成富文本编辑器和打印功能时,还需要注意以下几点: 1. 兼容性:确保编辑器和打印功能在主流浏览器上都能正常工作,...

    web 页面 编辑器

    Web页面编辑器是用于创建和编辑网页内容的重要工具,它为用户提供了一个图形化的用户界面,使得非编程背景的用户也能方便地进行网页内容的编辑和设计。KindEditor是一款开源的JavaScript富文本编辑器,版本号为3.3.1...

    javascript公式编辑器

    这个编辑器不仅允许用户输入和编辑复杂的数学表达式,还具备函数编辑和图形绘制的功能,极大地提升了在网页上处理数学公式的便利性。 在JavaScript公式编辑器中,主要涉及以下几个核心知识点: 1. **JavaScript**...

    asp在线编辑器(可以实现图文并茂)

    6. **用户体验**:为了提升用户体验,可以优化编辑器的加载速度,使用AJAX技术实现异步保存和预览功能,以及提供多语言支持。 ASP在线编辑器是构建动态网站不可或缺的一部分,尤其对于那些需要用户生成内容的应用来...

Global site tag (gtag.js) - Google Analytics