0

我正在尝试创建用于测试的简单自动化工具。我遵循了一个简单的教程

在网上并创建了一个带有 Eclipse 视图的 RCP。现在我尝试包含简单的 GEF

视图上的组件向我抛出错误说“无法创建视图:插件“GEFTutorial”无法实例化类“geftutorial.View”。

这是我的源代码

特别是当我取消注释创建

 private ScrollingGraphicalViewer viewer = new ScrollingGraphicalViewer();
 private RootEditPart rootEditPart = new ScalableFreeformRootEditPart();
 private EditPartFactory editPartFactory = new SimpleGEFEditPartFactory();

view.my view 上的所有上述陈述都出现了

这是我的 view.java 源代码

package geftutorial;

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.Color;
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;
import org.eclipse.gef.*;
import org.eclipse.gef.editparts.ScalableFreeformRootEditPart;
import org.eclipse.gef.ui.parts.ScrollingGraphicalViewer;    

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

    //Use a standard Viewer for the Draw2d canvas
     private ScrollingGraphicalViewer viewer = new ScrollingGraphicalViewer();
    //Use standard RootEditPart as holder for all other edit parts
    private RootEditPart rootEditPart = new ScalableFreeformRootEditPart();
    //Custom made EditPartFactory, will automatically be called to create
    //edit
    // parts for model elements
    private EditPartFactory editPartFactory = new SimpleGEFEditPartFactory();
    //The model
    private SuperWidget model;

    //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"});
        */



        //Create a dummy model
        model = new SuperWidget("Model");
        model.createDummyModel();
        //Initialize the viewer, 'parent' is the
        // enclosing RCP windowframe
        viewer.createControl(parent);
        viewer.setRootEditPart(rootEditPart);
        viewer.setEditPartFactory(editPartFactory);
        //Inject the model into the viewer, the viewer will
        // traverse the model automatically
        viewer.setContents(model);
        //Set the view's background to white
        viewer.getControl().setBackground(new Color(null, 255,255,255));            
    }

    /**
     * Passing the focus request to the viewer's control.
     */
    public void setFocus() {
        viewer.getControl().setFocus();
    }
}

有人可以给我一个线索吗?我是 RCP 和 GEF 的新手 :(

4

1 回答 1

0

我也只是在学习 GEF,但据我所见,gef 编辑器不是ViewPart(视图)而是编辑器,扩展EditPart.

在此处查看我正在进行的 GEF 教程。希望能帮助到你。

您还可以从eclipse 网站访问其他 GEF 教程。

于 2011-08-01T09:22:34.143 回答