Eclipse RCP - 如何以编程方式创建和打开View?

时间:2013-03-14 10:07:55

标签: view eclipse-plugin swt eclipse-rcp

我想在执行操作时打开一个包含表格的视图。

我可以通过viewId打开该代码的视图:

    display.asyncExec(new Runnable(){

        public void run() {
        ApplicationGIS.getView(true, viewId);

    }});

此视图的id在plugin.xml上定义,但我必须将一些参数传递给此视图上的表。我可以以编程方式创建我的自定义视图,但这次我无法打开它,因为我没有它的id。这是我的观点类:

public class MyCustomView extends ViewPart {

    private Text text;
    private Table table;
    private TableViewer tableViewer;


    @Override
    public void createPartControl(Composite parent) {
        // TODO Auto-generated method stub
        parent.setLayout(new GridLayout(4, false));

        Composite composite = new Composite(parent, SWT.NONE);
        composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 4, 1));
        composite.setLayout(new GridLayout(2, false));

        text = new Text(composite, SWT.BORDER);
        text.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));

        Composite composite_1 = new Composite(composite, SWT.NONE);
        composite_1.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1));
        GridLayout gl_composite_1 = new GridLayout(1, false);
        gl_composite_1.horizontalSpacing = 0;
        gl_composite_1.marginHeight = 0;
        gl_composite_1.marginWidth = 0;
        gl_composite_1.verticalSpacing = 0;
        composite_1.setLayout(gl_composite_1);

        tableViewer = new TableViewer(composite_1, SWT.BORDER | SWT.FULL_SELECTION);

        table = tableViewer.getTable();
        table.setHeaderVisible(true);
        table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
    }

    @Override
    public void setFocus() {
        // TODO Auto-generated method stub

    }
}

那么如何访问这个以编程方式创建的视图并打开它呢?

3 个答案:

答案 0 :(得分:7)

在Eclipse 3.x中,您可以打开如下视图:

MyView view = (MyView) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().showView(viewer_ID);

或者,如果您正在实现命令处理程序,则可以调用:

HandlerUtil.getActiveWorkbenchWindow(event).getActivePage().showView(viewId);

要设置一些内容,您只需在ViewPart中添加void setInput(MyContent input)等方法,然后在打开它之后将所需的参数传递给此方法。

答案 1 :(得分:1)

我遇到了完全相同的问题。我想从插件中注册的视图创建其他视图。这些网址可以满足您的需求:

http://wiki.eclipse.org/FAQ_How_do_I_open_multiple_instances_of_the_same_view

http://www.java-tips.org/other-api-tips/eclipse/how-to-create-multiple-instances-of-one-viewpart.html

PlatformUI.getWorkbench().getActiveWorkbenchWindow().
getActivePage().showView(String viewID,String secondaryID,int Mode);

答案 2 :(得分:0)

来自@Chriss回答;

我在我的视图中添加了一个方法setInput(parameter),然后我可以将我的值传递给我的自定义视图

    MyCustomView view = new MyCustomView();     
    view.setInput(parameter);
    display.asyncExec(new Runnable(){

        public void run() {
        ApplicationGIS.getView(true, viewId);


    }});

这可行。