`

RCP定制自己的搜索插件-实例

阅读更多

本文介绍如何扩展/定制 Eclipse 的搜索插件 org.eclipse.search(后面附实例)

 

资源查找是 Eclipse 的一个重要功能。可是,当我们做RCP开发时,Eclipse 搜索功能不一定适合个性化的需求,这是我们就需要扩展 Eclipse 的搜索插件 org.eclipse.search。

 

这里以Spring IDE Bean Search为例,介绍应扩展之处和其中的关键点。搜索页的类名为BeanSearchPage, 搜索结果页的类名为BeanSearchResultPage

 

1. 菜单加入显示搜索页(这是入口)

方法一:在org.eclipse.search.menu/dialogGroup中加一个action,以在java\file search 的旁边加一 Tab , 显示你的搜索页 MyBeanSearchPage。

方法二:菜单加入高级查找和替换。如图


 

2. 扩展org.eclipse.search.searchPages,定制自己的搜索页 MyBeanSearchPage

 

public class MyBeanSearchPage extends DialogPage implements ISearchPage
{
    private Text txtDirectory;

    private ISearchPageContainer fContainer;

    private Text txtPath;

    public MyBeanSearchPage()
    {
    }

    @Override
    public void createControl(Composite parent)
    {
        initializeDialogUnits(parent);

        Composite composite = new Composite(parent, SWT.NONE);
        composite.setFont(parent.getFont());
        GridLayout gridLayout = new GridLayout(3, false);
        composite.setLayout(gridLayout);

        Label lblNewLabel = new Label(composite, SWT.NONE);
        lblNewLabel.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false,
                false, 1, 1));
        lblNewLabel.setText("搜索关键字");

        txtDirectory = new Text(composite, SWT.BORDER);
        txtDirectory.setText("directory");
        txtDirectory.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true,
                false, 1, 1));
        setControl(composite);
        new Label(composite, SWT.NONE);

        Label lblNewLabel_1 = new Label(composite, SWT.NONE);
        lblNewLabel_1.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false,
                false, 1, 1));
        lblNewLabel_1.setText("目录路径");

        txtPath = new Text(composite, SWT.BORDER);
        txtPath.setText("E:\\yucheng\\bsp\\trunk\\runtime-BankITIDE.product\\HelloBSP\\HelloWorld\\HelloCommu\\Hello\\input\\pcs");
        txtPath.setEditable(false);
        txtPath.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false,
                1, 1));

        Button btnNewButton = new Button(composite, SWT.NONE);
        btnNewButton.addSelectionListener(new SelectionAdapter()
        {
            @Override
            public void widgetSelected(SelectionEvent e)
            {
                DirectoryDialog directoryDialog = new DirectoryDialog(
                        getShell());
                directoryDialog.setText("选择目录路径");
                String directoryPath = directoryDialog.open();
                txtPath.setText(directoryPath);
            }
        });
        btnNewButton.setText("选择目录路径");
    }

    @Override
    public boolean performAction()
    {
        NewSearchUI.activateSearchResultView();
        MyBeanSearchQuery myBeanSearchQuery = new MyBeanSearchQuery();
        myBeanSearchQuery.setKeyword(txtDirectory.getText());
        myBeanSearchQuery.setDirectoryPath(txtPath.getText());
        NewSearchUI.runQueryInBackground(myBeanSearchQuery);
        return true;
    }

    @Override
    public void setContainer(ISearchPageContainer container)
    {
        fContainer = container;
    }

}
 

 

 

3. 扩展org.eclipse.search.searchResultViewPages,定制自己的搜索结果页BeanSearchResultPage

public class MySearchResultPage extends AbstractTextSearchViewPage
{
    private MyFileTreeContentProvider fContentProvider;

    @Override
    protected void elementsChanged(Object[] objects)
    {
        if (fContentProvider != null)
        {
            fContentProvider.elementsChanged(objects);
        }
    }

    @Override
    protected void clear()
    {
        if (fContentProvider != null)
            fContentProvider.clear();
    }

    @Override
    protected void configureTreeViewer(TreeViewer viewer)
    {
        viewer.setUseHashlookup(true);
        MyFileLabelProvider myFileLabelProvider = new MyFileLabelProvider();
        viewer.setLabelProvider(myFileLabelProvider);
        viewer.setContentProvider(new MyFileTreeContentProvider(viewer));
        fContentProvider = (MyFileTreeContentProvider) viewer
                .getContentProvider();
        this.setElementLimit(50);
    }

    @Override
    protected void configureTableViewer(TableViewer viewer)
    {
        // TODO Auto-generated method stub

    }

}

  

2和3的扩展点



 

 

4. 此外,还用到的相关接口,详见附件的插件工程

 

ISearchQuery.java,搜索的入口

Match.java,结果集

NewSearchUI.java,UI启动类

 

5. 运行

搜索输入界面



 

搜索结果显示界面



  

 

6. 附件是一个简单的示例。

 

 

  • 大小: 62.6 KB
  • 大小: 37.3 KB
  • 大小: 96.4 KB
  • 大小: 37.5 KB
分享到:
评论

相关推荐

    RCP 开发工具 eclipse-rcp-2020-06-R-linux-x86

    Eclipse RCP支持多编辑器实例,可以在同一工作空间中同时打开多个编辑器。 5. **透视图(Perspective)**:透视图是工作台的布局,它定义了哪些视图和编辑器在工作台上可见以及它们的位置。开发者可以创建不同的...

    Eclipse RCP Plug-in开发自学教程(Eclipse3.6)

    Eclipse RCP (Rich Client Platform) 是一个框架,允许开发者构建高度可定制和可扩展的桌面应用程序。本教程是针对Eclipse 3.6版本的,提供了一个详细的学习路径,适合初学者入门。教程内容涵盖从基础到进阶的多个...

    Hibernate +  RCP + MySQL+ Jfreechart 开发实例 

    3. 构建RCP应用:安装Eclipse RCP插件,创建RCP项目,设计UI界面,实现事件监听和业务逻辑。 4. 使用JFreeChart:导入JFreeChart库,根据数据生成图表,将其嵌入到RCP应用的视图中。 5. 测试与运行:确保所有组件...

    Eclipse RCP 属性编辑器实例

    在这个"属性编辑器实例"中,我们将深入探讨如何在Eclipse RCP环境中实现属性编辑器。 属性编辑器是Eclipse RCP中的一个重要组成部分,它允许用户查看和修改对象的属性值。这些对象可以是程序中的数据模型、工作台...

    RCP 界面布局实例

    RCP基于插件模型,每个功能模块都可以作为一个独立的插件,这使得RCP具有高度的可扩展性和灵活性。在RCP应用中,界面布局通常由多个组件构成,如视图(View)、编辑器(Editor)、透视图(Perspective)等。 视图是...

    rcp editor实例的项目代码

    本文将深入探讨Eclipse RCP(Rich Client Platform)编辑器实例的项目代码,这是Eclipse插件开发中的一个重要组成部分。RCP是Eclipse框架提供的一种用于构建桌面应用程序的平台,它允许开发者利用Eclipse的强大功能...

    rcp editor实例的项目代码2

    本项目"rcp editor实例的项目代码2"是针对Eclipse插件开发的一个实战案例,旨在帮助开发者了解和掌握如何在Eclipse RCP环境中实现自定义编辑器。 首先,我们需要理解Eclipse插件开发的基本概念。Eclipse是一个开放...

    eclipse 3.6 rcp 开发

    - **特点**: RCP 支持高度可定制的用户界面,并且能够轻松地添加新功能而不需重启应用。 - **优势**: 利用Eclipse平台现有的基础设施(如UI组件、命令架构等),使得开发者可以快速构建出高质量的应用程序。 **1.2 ...

    eclipse插件开发 rcp入门开发详细讲解一

    ### Eclipse RCP插件开发详解 #### 一、Eclipse RCP概述 Eclipse RCP (Rich Client Platform) 是一种基于Java技术构建的框架,用于开发功能丰富的桌面应用程序。它利用了Eclipse平台的核心组件,如工作台...

    ECLIPSE+RCP应用系统开发方法与实战(PDF 高岗著)

    Eclipse RCP是Eclipse IDE的一部分,它提供了一个框架,使得开发者可以构建功能丰富的、可定制的桌面应用程序。以下是对该书可能涉及的知识点的详细阐述: 1. **Eclipse RCP基础**:首先,书中会介绍Eclipse RCP的...

    eclipse 插件 实例01

    Eclipse 插件实例01是一个基于Eclipse RCP(Rich Client Platform)开发的应用程序,展示了如何在Eclipse环境中创建和使用自定义插件。Eclipse RCP是Eclipse IDE的核心组成部分,它允许开发者构建功能丰富的桌面应用...

    Eclipse-RCP培训教程.rar

    它基于插件模型,允许开发者通过添加或移除插件来构建和定制应用。核心组件包括Workbench、Perspective、View、Editor和Part,这些组件协同工作以创建用户界面。Workbench是整个应用的容器,Perspective是视图的组织...

    RCP自学文档

    Eclipse Rich Client Platform (RCP) 是一个强大的框架,用于构建桌面应用程序,它利用Eclipse的架构和插件系统,使得开发者能够构建高度可定制和可扩展的应用程序。RCP允许开发者复用Eclipse已经提供的大量功能,如...

    RCP——CRM系统实例

    RCP基于插件模型,每个功能模块都是一个独立的插件,通过插件间的服务发现和通信机制协同工作。这使得CRM系统的各个组件能够独立开发和升级,降低了维护成本。 在构建CRM系统时,我们通常会涉及以下几个关键模块: ...

    RCP 开发自学教程

    - **插件(Plugin)**: Eclipse RCP 应用由多个插件组成,每个插件可以提供特定的功能或服务。 - **扩展(Extension)**: 插件可以通过定义扩展来修改或增强其他插件的行为。 - **扩展点(Extension Point)**: 扩展点是由...

    eclipse插件开发---简单例子

    此外,你还将学习如何利用Eclipse的强大的插件系统来增强开发环境,为自己的工作流定制工具。一旦掌握了基础,你就可以继续探索更复杂的插件开发,如使用PDE(Plug-in Development Environment)工具集、使用RCP...

Global site tag (gtag.js) - Google Analytics