天天看点

RCP 打开视图的不同实例,并设置不同的值

创建一个视图,里面布局用了个tableviewer,通过一个Action,按钮打开该视图,每次打开的视图的内容可设置不同。

1、视图显示

RCP 打开视图的不同实例,并设置不同的值

2、点击action,重新打开一个view,并设置里面展示的值

RCP 打开视图的不同实例,并设置不同的值
RCP 打开视图的不同实例,并设置不同的值

主要实现代码:

Plugin.xml

<extension
         point="org.eclipse.ui.views">
      <view
            <strong><span style="color:#ff0000;">allowMultiple="true"   //设置允许打开多页面</span></strong>
            class="multipleview.View"
            id="MultipleView.view"
            name="View">
      </view>
   </extension>
           

视图布局类的代码,最主要的updates方法

package multipleview;

import java.util.List;

import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.ISharedImages;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.part.ViewPart;

public class View extends ViewPart {
	public static final String ID = "MultipleView.view";

	private TableViewer viewer;

	/**
	 * The content provider class is responsible for providing objects to the
	 * view. It can wrap existing objects in adapters or simply return objects
	 * as-is. These objects may be sensitive to the current input of the view,
	 * or ignore it and always show the same content (like Task List, for
	 * example).
	 */
	class ViewContentProvider implements IStructuredContentProvider {
		public void inputChanged(Viewer v, Object oldInput, Object newInput) {
		}

		public void dispose() {
		}

		public Object[] getElements(Object parent) {
			if (parent instanceof Object[]) {
				return (Object[]) parent;
			}
	        return new Object[0];
		}
	}

	class ViewLabelProvider extends LabelProvider implements
			ITableLabelProvider {
		public String getColumnText(Object obj, int index) {
			return getText(obj);
		}

		public Image getColumnImage(Object obj, int index) {
			return getImage(obj);
		}

		public Image getImage(Object obj) {
			return PlatformUI.getWorkbench().getSharedImages().getImage(
					ISharedImages.IMG_OBJ_ELEMENT);
		}
	}

	/**
	 * This is a callback that will allow us to create the viewer and initialize
	 * it.
	 */
	public void createPartControl(Composite parent) {
		viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL
				| SWT.V_SCROLL);
		viewer.setContentProvider(new ViewContentProvider());
		viewer.setLabelProvider(new ViewLabelProvider());
		// Provide the input to the ContentProvider
		viewer.setInput(new String[]{"one","two","three"});
	}

	/**
	 * Passing the focus request to the viewer's control.
	 */
	public void setFocus() {
		viewer.getControl().setFocus();
	}
	<strong><span style="color:#cc0000;">public void updates(List<String> result){
		viewer.setInput(result.toArray());//设置表的内容值
	}</span></strong>
}
           

CreteViewAction代码

package multipleview.action;

import java.util.ArrayList;
import java.util.List;

import multipleview.View;

import org.eclipse.jface.action.Action;
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.actions.ActionFactory.IWorkbenchAction;

/**
 * 创建视图的多个实例
 * @author Admin
 *
 */
public class CreateViewAction extends Action implements IWorkbenchAction {
	
	public static final String ID = "multipleview.action.createView"; //$NON-NLS-1$
	
	private int instanceNum=1; 
	private final IWorkbenchWindow window;
	
	public CreateViewAction(IWorkbenchWindow window) {
		this.window = window;
		setId(ID);
		setText("CreateView");
	}
	
	@Override
	public void run() {
		// TODO Auto-generated method stub
		<strong><span style="color:#ff0000;">try { 
			System.out.println("instanceNum:" + instanceNum);
			IViewPart vPart =	window.getActivePage().showView(View.ID, Integer.toString(instanceNum), IWorkbenchPage.VIEW_ACTIVATE); 
		    
			List<String> strings = new ArrayList<>();
		    strings.add("AA" + instanceNum);
		    strings.add("BB" + instanceNum);
		    strings.add("CC"+instanceNum);
		    strings.add("DD"+instanceNum);
			((View)vPart).updates(strings) ;//调用视图的更新方法,用于更新视图内的表数据    
			
			instanceNum++; 
		          
		    } catch (PartInitException e) { 
		      // handle exception 
		    } </span></strong>
	}
	
	@Override
	public void dispose() {
		// TODO Auto-generated method stub

	}

}
           

代码工程:http://download.csdn.net/detail/luoww1/9276641

继续阅读