EclipseRCP技术积累

一、同时关闭所有打开的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;
    }
目 录 1.富客户端平台 1 1.1.概述 1 1.2.Eclipse RCP 建设风格——插件,扩展和扩展点 1 2.创建你的第一个RCP程序 1 2.1.创建一个RCP程序 2 2.2.启动你的RCP程序 5 2.3.应用程序VS 产品 6 3.应用程序里的插件ID 7 4.Actions的用法(菜单和工具栏) 7 4.1.概述 7 4.2.通过编码添加 8 4.3.由“扩展”方式向程序添加菜单和工具栏 11 5.添加组合键 19 5.1.概述 19 5.2.声明actions的组合键 19 6.系统托盘 24 7.外观 30 7.1.向程序中添加视图模板 31 7.2.向应用程序添加VIEW 36 7.3.向VIEW里添加action 40 8.和编辑器一起工作 51 8.1.概述 51 8.2.创建工程 51 8.3.创建并准备domain 模型 51 8.4.在视口中使用domain模型 57 8.5.加入编辑器 58 8.6.调用编辑器 66 8.7.向编辑器提供内容 70 9.对话框 71 9.1概述 71 9.2.预定义的对话框 71 9.2.1.概述 71 9.2.2.创建工程 71 9.2.3.声明action 71 9.2.4.调用对话框 71 9.3.用户自定义对话框 74 9.3.1.概述 74 9.3.2.创建工程 74 9.3.3.声明action 74 9.3.4.声明action 74 9.3.5.创建对话框 75 10.向导(wizard) 77 10.1.概述 77 10.2.例子 77 11.首选项 85 11.1 首选项 85 11.2.使用首选项 85 11.3.首选项页 91 12.添加状态条 97 12.1.安装状态条 97 12.2.共享状态条 98 13.透视 103 13.1.向你的程序中添加透视图 103 13.2.使透视图可选。 107 13.2.1.使透视图可由一个coolbar可选 107 13.2.2.使透视图可通过菜单选择。 109 14.进度报告 112 15.将外部类包含进你的程序 118 15.1.概述 118 15.2.向构建路径中添加jar 118 15.3.使jar在你的运行路径里有效 119 16.提示和策略 120 16.1.控制台日志 120 16.2.保存用户的布局 121 16.3.获得display 122 16.4.使用eclipse的“保存”action 123 16.5.装载模型 127 16.6.向你的程序添加错误日志视口 127 17.制造一个产品 129 17.1.概述 129 17.2.创建一个工程 130 17.3.测试你的产品 134 18.商标 134 18.1.欢迎页面 134 18.2.商标 135 18.3.风格化launcher 136 19.发布你的产品 137 20.发布引入外部jar的产品 141 20.1.整合外部jar和第三方库 141 Tip 142 21.1.创建一个新工程 144 21.2.创建一个产品 144 21.3.添加依赖性 145 21.4.向程序中添加action 146 21.5.创建一个帮助插件工程////原著写的不好 149 22.附录:配置文件 152 22.1.概述 152 22.2..project 153 22.3.Manifest.MF 154 23.附录:使用接口技术 154 23.2.Jface 154
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值