天天看點

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

繼續閱讀