java - 将参数传递给 View

标签 java eclipse eclipse-plugin swt eclipse-rcp

在我的 RCP 应用程序中,我有一个 View ,左侧有一个用于导航的 TreeViewer View ,右侧有一个用于我的 View 的文件夹。透视图看起来像这样:

public void createInitialLayout(IPageLayout layout) {
    layout.setEditorAreaVisible(false);
    layout.setFixed(false);

    layout.addStandaloneView(NavigationView.ID, false, IPageLayout.LEFT, 0.7f, layout.getEditorArea());

    right = layout.createFolder("right", IPageLayout.RIGHT, 0.3f, "com.my.app.views.browser.navigation");


    layout.getViewLayout(WallpaperView.Id).setCloseable(false);//dummy view to keep the folder from closing
    layout.getViewLayout(WallpaperView.Id).setMoveable(false);      

    right.addView(WallpaperView.Id);        
    //add some placeholders for the potential views
    right.addPlaceholder(DefaultAdminView.ID+":*");

}

我想根据用户在导航树中的选择打开不同的 View 。认为这不会太难。我的导航 TreeView :

tree = new TreeViewer(composite);
tree.setContentProvider(new BrowserNavigationTreeContentProvider());
tree.setLabelProvider(new BrowserNavigationTreeLabelProvider());
tree.setInput(UserProfileAdvisor.getProject());     

//register Mouselistener for doubleclick events
tree.addDoubleClickListener(new IDoubleClickListener(){

    @Override
    public void doubleClick(DoubleClickEvent event) {
        TreeSelection ts = (TreeSelection) event.getSelection();
        Object selectedItem = ts.getFirstElement();
        String viewId = DefaultAdminView.ID;                

         //set viewId depending on the selectedItem.class
        try {
            PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().showView(viewId, String.valueOf(++viewCounter), IWorkbenchPage.VIEW_ACTIVATE);

        } catch (PartInitException e) {
            ILogHelper.error("The view for the selected object could not be opened", e);
        }
    }

});

这似乎工作正常。只有一个小问题: 我需要以某种方式将对象(比如说 selectedItem)传递到我的 View ,以便让用户与其内容进行交互。我该怎么做?

我看过一些示例,其中我的一些同事编写了自己的 View ,并将其放置在右侧。然后他们添加了一个 CTabFolder,实例化 View 并手动添加它们。有更智能的解决方案吗?

最佳答案

创建一个新接口(interface),给它一个像accept( Object parameter ) 这样的方法,并让你的 View 实现它。

然后,当您执行 PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().showView(viewId, String.valueOf(++viewCounter), IWorkbenchPage.VIEW_ACTIVATE) 方法时 showView 返回一个 IViewPart。将此返回转换到您的界面并调用 accept 方法。

关于java - 将参数传递给 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5003962/

相关文章:

java - 如何在我的 eclipse 中调试远程应用程序

Eclipse 创建空的 Node.js Express 项目

eclipse - 超链接 eclipse 控制台 - 延迟写入导致 BadLocationException?

java - 如何使用 IWorkspaceRunnable 安排或加入一组更改?

java - 从 map 检索数据时获取双方括号

java - 使用 class.isEnum() 还是 instanceof Enum 更好?

java - 动态壁纸设置按钮不起作用

java - this.getClass().getClassLoader().getResourceAsStream() 在 RCP 产品中不起作用

java - for 语句不循环 - android

java - ehcache 后写式缓存 thread-priority