`
grape927
  • 浏览: 75661 次
  • 性别: Icon_minigender_2
  • 来自: 深圳
社区版块
存档分类
最新评论

eclispe RCP 小技巧(转)

    博客分类:
  • RCP
阅读更多

一、同时关闭所有打开的view 
 
在view中,只有一个close,每次只能关闭当前窗口
在eclipse的编辑窗口的标题上点右键,里面有 close All
可以使用遍历的方法,遍历所有打开的View,然后将其隐藏:
AsyncUtil.asyncExec(new Runnable()
{
       public void run()
       {
             IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
             IViewReference[] iViewReferences = page.getViewReferences();
             for (IViewReference iViewReference: iViewReferences)
                  if (!ID.equals(iViewReference.getId()))
                       page.hideView(iViewReference);
        }
});   
  二、RCP中产生目标区的Bar 
 
产生红线区域的Bar,实现方法如下:
1、这个是perspective,要创建多个perspective,然后设置某个为active
2、在WorkbenchWindowAdvisor中preWindowOpen内,加下面这段代码
public void preWindowOpen() { 
        IPreferenceStore apiStore = PrefUtil.getAPIPreferenceStore();
        apiStore.setValue(IWorkbenchPreferenceConstants.DOCK_PERSPECTIVE_BAR,
                IWorkbenchPreferenceConstants.TOP_RIGHT);
        apiStore.setValue(
                IWorkbenchPreferenceConstants.SHOW_TRADITIONAL_STYLE_TABS,
                false);
 }
3、需要加 config.setShowPespectivebar(true); 
三、RCP项目--窗口关闭事件 
在ApplicationWorkbenchWindowAdvisor中override
public boolean preWindowShellClose() {
        // do nothing, but allow the close() to proceed
        MessageBox msgBox = new MessageBox(new Shell(), SWT.YES|SWT.NO|SWT.ICON_QUESTION);
        msgBox.setText("退出系统");
        msgBox.setMessage("确定退出系统?");
        if(msgBox.open()==SWT.YES){
            return true;
        }
        return false;
    }
以后使用IWorkbenchWindow的getShell().close();都会调用该处代码.  
四、在RCP中设计界面适合桌面大小 
 
final int screenWidth = Display.getCurrent().getBounds().width;
final int screenHeight = Display.getCurrent().getBounds().height;
 
五、Treeviewer中通过代码,选中树上的某个node节点 
StructuredSelection sel=new StructuredSelection(node);
 tree.setSelected(sel); 
六、TreeViewer实现双击展开、关闭 
private class DoubleEventPro implements MouseListener {
        public void mouseDoubleClick(MouseEvent e) {
            TreeItem item = viewer.getTree().getItem(new Point(e.x, e.y));

            if (item != null && item.getItem(0).getText().trim().length() == 0) {
                viewer.expandToLevel(item.getData(), 1);
                return;
            }

            if (item != null && item.getItemCount() > 0
                    && item.getItem(0).getText().trim().length() > 0) {
                item.setExpanded(!item.getExpanded());
            }
        }

        public void mouseDown(MouseEvent e) {
        }
        public void mouseUp(MouseEvent e) {

        }
    } 
七、 如何屏蔽掉视图窗口上的右键弹出菜单?


方法一:在 postWindowOpen() 中执行下面语句:
PlatformUI.getWorkbench().getDisplay().addFilter(SWT.MouseUp, new Listener() {
    public void handleEvent(final Event event) {
        if(event.widget == your editor && event.button == 3) {
            int hwndCursor = OS.GetCapture ();
            OS.PostMessage(hwndCursor, OS.WM_LBUTTONDOWN, hwndCursor, OS.HTCLIENT | (OS.WM_MOUSEMOVE << 16));
        }
    }
});

其它:org.eclipse.ui.internal.presentations.util包中的StandardViewSystemMenu类控制着这些菜单,还没来得急仔细研究,研究过后再补充

八、在使用tableviewer的时候导入大量数据的问题

创建了一个tableviewer,然后使用setInput方法导入数据,如果数据量很大的话根本就无效率可言了,以下是几种解决的方法:

方法一:通过移动滚动条来达到自动加载的目的,在滚动条的事件中加入翻页的代码,可以参考《Eclipse从入门到精通》第二版的P383

方法二:分页显示(http://www.eclipseworld.org/bbs/read-cec-tid-11678-keyword-table.html

方法三:使用 Virtual Tables,JFace3.2的Viewer已经支持SWT.VIRTUAL样式
http://www.eclipse.org/articles/Article-SWT-Virtual/Virtual-in-SWT.html

1 int COUNT = 10000;
2 final String [] itemStrings = new String [COUNT];
3 for (int i = 0; i < COUNT; i++) {
4   itemStrings = "item " + i;
5 }
6 final Table table = new Table(parent, SWT.BORDER | SWT.VIRTUAL);
7 table.addListener(SWT.SetData, new Listener() {
8   public void handleEvent(Event event) {
9     TableItem item = (TableItem)event.item;
10     int index = event.index;
11     item.setText(itemStrings [index]);
12   }
13 });
14 table.setItemCount(COUNT);

九、在透视图快捷方式栏中同时显示多个透视图快捷方式

如果在程序中做了多个个透视图,默认只显示初始透视图快捷方式,每次都要 打开透视图——other,特麻烦,所以,一下提供两种方法:

1、在切换栏中显示
public class PIMWorkbenchAdvisor extends WorkbenchAdvisor {
    @Override
    public void postStartup() {
        super.postStartup();
        IWorkbenchWindow activeWorkbenchWindow = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
        //2007.01.11 设置同时显示多个透视图标
        PerspectiveBarManager barManager=((WorkbenchWindow)activeWorkbenchWindow).getPerspectiveBar();
        if(barManager != null){
            IPerspectiveDescriptor mailPerspective = WorkbenchPlugin.getDefault().getPerspectiveRegistry   ().findPerspectiveWithId("MyWork_mail.perspective");
            PerspectiveBarContributionItem item=new PerspectiveBarContributionItem(mailPerspective,activeWorkbenchWindow.getActivePage());
            barManager.addItem(item);
        }
}
2、在下拉框中(shortcut)显示
public class UiPerspective implements IPerspectiveFactory
{
    public void createInitialLayout(IPageLayout layout){
....
        //增加透视图
        layout.addPerspectiveShortcut("net.sf.pim.plugin.UiPerspective");
        layout.addPerspectiveShortcut("MyWork_mail.perspective");
       }
}
十、控制“最近打开文档”的个数
       RCP中在继承ActionBarAdvisor的类中定义:
       private IContributionItem reOpenAction = ContributionItemFactory.REOPEN_EDITORS.create(window);
       然后在fillMenuBar(IMenuManager menuBar)方法中添加上面的aciton
       运行时“最近打开的文档”只有4个,如果想自己控制“最近打开的文档”的数量,则设置一下Workbench中的初始化首选项时RECENT_FILES的默认参数值如:
WorkbenchPlugin.getDefault().getPreferenceStore().setDefault(IPreferenceConstants.RECENT_FILES,10);

十一、设置Eclipse RCP程序的外观和首选项
       RCP应用程序的缺省外观是一个空白窗口,一般我们要通过一个WorkbenchAdvisor类对界面进行定制。 WorkbenchAdvisor有很多回调方法,可以在preWindowOpen()方法里设置菜单、工具条、状态栏、进度栏、透视图切换工具是否可见,在fillActionBars()方法里添加菜单和工具条项,在getInitialWindowPerspectiveId()方法里指定首选的透视图。

       缺省情况下,透视图切换工具位于窗口左上角,在Eclipse里可以通过Window->Preferences-> Workbench->Appearance改变它的位置,那么怎样用程序控制它呢?有两个方法,第一个是使用如下代码设置 IPreferenceStore中的变量:

IPreferenceStore apiStore = PrefUtil.getAPIPreferenceStore();
apiStore.setValue(IWorkbenchPreferenceConstants.DOCK_PERSPECTIVE_BAR, IWorkbenchPreferenceConstants.TOP_RIGHT);
另一个方法是在plugin所在目录建一个名为plugin_customization.ini的文件,里面写如下内容:

your.plugin.id/DOCK_PERSPECTIVE_BAR=topRight
其他与plugin相关的Preference值可以用同样方法设置。

Update:在最新的Eclipse 3.1M5a版本中,对RCP应用程序菜单和工具条的定制方法有所改变,应该使用新加入的ActionBarAdvisor类来完成此项工作。

十二、获得自己开发的plugin被安装的目录
  /** *//**
     * @return 本插件的安装路径
     */
    public String getInstallDir() ...{
        if (installPath == null) ...{
            URL localUrl = null;
            try ...{
                localUrl = FileLocator.toFileURL(getDefault().getBundle()
                        .getEntry("/"));
                installPath = localUrl.getFile().substring(1);
            } catch (Exception e) ...{
                log(e);
            }
        }
        return installPath;
    }

轉自http://duguanglong002.blog.163.com/blog/static/26955626200955415545/

分享到:
评论

相关推荐

    eclipse-rcp开发培训PPT

    **Eclipse RCP 开发详解** Eclipse RCP(Rich Client Platform)是Eclipse IDE提供的一种强大的客户端应用程序框架,它允许开发者构建功能丰富的、可扩展的桌面应用。本培训PPT将带你深入理解Eclipse RCP的核心概念...

    Eclipse RCP教程

    ### Eclipse RCP 教程知识点概述 #### 一、Eclipse RCP 概览 - **定义**:Eclipse RCP(Rich Client Platform)是一种基于Java的框架和技术集合,允许开发者构建灵活且可扩展的桌面应用程序。 - **目标**:通过提供...

    eclipse rcp 插件开发学习笔记.pdf 15-24章

    6. **第20章:富客户端平台(RCP)技术** - 本章深入讨论了RCP的技术基础,可能包括了窗口小部件、视图、编辑器、透视图的概念,以及如何利用这些构建应用程序的用户界面。 7. **第21章:Draw2d** - Draw2d是Eclipse...

    rcp perspective

    6. **视图管理**:RCP小技巧可能包括如何添加、移除和调整视图的位置,这通常涉及到`IViewPart`和`IWorkbenchPage`的相关API。 7. **透视图设置代码**:一些常用的设置代码可能包括如何初始化透视图,调整视图的...

    RCP 开发自学教程

    **1.2 ECLIPSERCP 建设风格——插件,扩展和扩展点** - **插件(Plugin)**: Eclipse RCP 应用由多个插件组成,每个插件可以提供特定的功能或服务。 - **扩展(Extension)**: 插件可以通过定义扩展来修改或增强其他...

    Eclipse学习笔记.rar

    "Eclipse学习笔记"很显然是为了帮助开发者深入理解和熟练掌握Eclipse的各项功能和使用技巧。这个压缩包包含两份文档——"Eclipse的Rich Client Platform1.doc"和"Eclipse的Rich Client Platform2.doc",它们很可能是...

    如何制作最小的RCP程序压缩包(包含JRE)

    制作包含JRE的最小RCP程序压缩包,不仅需要理解RCP与JRE的工作原理,还需要掌握一定的压缩技巧。通过合理地去除不必要的类库、使用Pack200工具压缩以及优化RCP运行时环境,可以有效地减小程序包的大小,提高分发效率...

    Eclipse插件开发学习笔记19-21章.rar

    3. **图形绘制**:掌握在Eclipse环境中进行图形绘制的API和技巧。 4. **图形事件**:处理图形元素的鼠标和键盘事件,实现交互功能。 5. **图形布局**:使用各种布局策略来自动调整图形元素的位置和大小。 6. **...

    Eclipse Form开发实例代码

    通过深入学习和实践这些Eclipse SWT Form开发实例代码,开发者能够掌握创建高效、原生且用户友好的GUI应用程序的技巧,同时提升在Eclipse平台上的开发能力。无论是对于初学者还是经验丰富的开发者,这些实例都提供了...

    程序界面美化技术

    因此,掌握Eclipse RCP界面美化技巧对于提高最终产品的吸引力至关重要。 #### Eclipse RCP界面美化的重要性 随着用户对软件美观度和易用性的要求日益提高,良好的界面设计不仅能够提升用户体验,还能增强软件的...

    rcp入门资料 ,一起分享

    **RCP(Rich Client Platform)入门知识详解** ...综上所述,RCP为开发复杂桌面应用提供了强大的框架,新手可以通过学习相关教程和实践案例,逐步掌握RCP的开发技巧,从而创建出功能丰富且用户体验良好的应用程序。

    Eclipse4.x插件开发实践

    - **安装PDE相关组件**: 通过Eclipse的帮助菜单安装了PDE相关的组件,包括CVS Client、JDT、PDE、RCP等相关源码包。 #### 四、PDE环境配置详解 - **安装过程**: 在Eclipse的帮助菜单下选择"Install New Software......

    eclipse核心编程 WEB编程 组建开发2

    此外,还会分享一些提高开发效率的小技巧,如快捷键设置、自定义工作空间布局等。 《技术宝典》部分则包含了Eclipse的高级特性和最新发展,例如Eclipse RCP( Rich Client Platform)用于构建桌面应用程序,以及...

    Eclipse自定义启动画面和图标的方法介绍

    同时,文章最后也提到了关于Eclipse相关的其他技巧文章,如“Eclipse代码格式化设置简单介绍”、“eclipse联想功能设置技巧”、“Eclipse Debug模式的开启与关闭问题简析”,这些内容可以进一步帮助开发者深入了解...

    Fita.RCP-开源

    【Fita.RCP-开源】是一款专为射箭爱好者和专业人士设计的开源应用程序,它基于Eclipse Rich Client Platform (RCP) 构建。Eclipse RCP 是一个强大的开发框架,用于构建桌面应用程序,它提供了丰富的用户界面组件和...

    Eclipse SWT,JFace开发实战精解 书中

    本篇内容将深入解析Eclipse SWT和JFace的开发实践,帮助读者理解这两个库的核心概念和应用技巧。 首先,SWT是Eclipse项目中的一个重要组成部分,它的设计目标是提供高性能、与平台无关的用户界面组件。SWT通过本地...

    Eclipse SWT/JFace 核心应用光盘源码

    Eclipse SWT(Standard Widget Toolkit)和JFace是Java开发中用于构建图形用户界面(GUI)的库,尤其在开发Eclipse插件和RCP(Rich Client Platform)应用程序时非常重要。这两个库提供了丰富的组件和框架,使得...

    eclipse for mac

    9. **Eclipse IDE for RCP and RAP Developers**:除了标准的Java开发版本,Eclipse还提供了RCP(Rich Client Platform)和RAP(Rich Ajax Platform)版本,用于构建桌面和Web应用程序。 10. **持续集成与自动化**...

    SWT-resource address

    SWT(Standard Widget Toolkit)是Eclipse平台的一部分,它提供了一组基于本地GUI库的跨平台小部件,可以创建高性能的用户界面。SWT的目标是提供一个高效、可移植且功能丰富的图形界面,同时保持对底层操作系统的...

Global site tag (gtag.js) - Google Analytics