创建一个视图,里面布局用了个tableviewer,通过一个Action,按钮打开该视图,每次打开的视图的内容可设置不同。
1、视图显示
2、点击action,重新打开一个view,并设置里面展示的值
主要实现代码:
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>
}
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