0

私はGEFの初心者です。だから私は私のプロジェクトファイルでサンプルの例に従おうとしています.

しかし、サンプルを開始しようとすると、NullPointerException が発生しました。

at kr.co.hoony.test.ApplicationWorkbenchAdvisor.postStartup(ApplicationWorkbenchAdvisor.java:37)

そして、私のコードは以下のようなものです。

@Override
public void postStartup() {

            try {

                IWorkbenchPage wbPage = PlatformUI.getWorkbench()
                        .getActiveWorkbenchWindow()
                        .getActivePage();

                wbPage.openEditor(
                        new MyEditorInput("KSH"), 
                        MyGraphicalEditor.ID, 
                        false);

            } catch (Exception e) {
                e.printStackTrace();
            }


}

そこで検索してみたところ、解決策が1つ見つかり、以下のように再試行しました。

@Override
public void postStartup() {

    Display.getDefault().asyncExec(new Runnable() {

        @Override
        public void run() {

            try {

                IWorkbenchPage wbPage = PlatformUI.getWorkbench()
                        .getActiveWorkbenchWindow()
                        .getActivePage();

                wbPage.openEditor(
                        new MyEditorInput("KSH"), 
                        MyGraphicalEditor.ID, 
                        false);

            } catch (Exception e) {
                e.printStackTrace();
            }

        }
    });

}

その後、エラー メッセージは表示されませんが、別の問題があります。

アクティブなページにラベルを表示したいのですが、うまくいきません。

だから私が書いたすべてのコードをアップロードしたい

Block.java

package kr.co.hoony.test.example;

public class Block {

    private String name;
    private String width;

    public Block() {

        this.name = "Block";
        this.width = "20";

    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getWidth() {
        return width;
    }

    public void setWidth(String width) {
        this.width = width;
    }

}

BlockEditPartFactory.java

package kr.co.hoony.test.example;

import org.eclipse.gef.EditPart;
import org.eclipse.gef.EditPartFactory;
import org.eclipse.gef.editparts.AbstractGraphicalEditPart;

public class BlockEditPartFactory implements EditPartFactory {

    @Override
    public EditPart createEditPart(EditPart context, Object model) {

        AbstractGraphicalEditPart part = null;

        if(model instanceof Block){
            part = new BlockGrahpicalEditPart();
        }

        part.setModel(model);
        return part;
    }

}

BlockFigure.java

package kr.co.hoony.test.example;





import org.eclipse.draw2d.ColorConstants;
import org.eclipse.draw2d.Figure;
import org.eclipse.draw2d.Label;
import org.eclipse.draw2d.LineBorder;
import org.eclipse.draw2d.XYLayout;
import org.eclipse.draw2d.geometry.Rectangle;

public class BlockFigure extends Figure {

    private Label labelName = new Label();
    private Label labelWidth = new Label();
    private XYLayout layout;

    public BlockFigure() {

        layout = new XYLayout();
        setLayoutManager(layout);

        labelName.setForegroundColor(ColorConstants.blue);
        add(labelName);
        setConstraint(labelName, new Rectangle(5, 5, -1, -1));

        labelWidth.setForegroundColor(ColorConstants.green);
        add(labelWidth);
        setConstraint(labelWidth, new Rectangle(5, 5, -1, -1)); 

        setForegroundColor(ColorConstants.black);
        setBorder(new LineBorder(5));
    }

    public void setLabelName(Label labelName) {
        this.labelName = labelName;
    }

    public void setLabelWidth(Label labelWidth) {
        this.labelWidth = labelWidth;
    }

    public void setLayout(XYLayout layout) {
        this.layout = layout;
    }

}

BlockGraphicalEditPart.java

package kr.co.hoony.test.example;

import org.eclipse.draw2d.IFigure;
import org.eclipse.gef.editparts.AbstractGraphicalEditPart;

public class BlockGrahpicalEditPart extends AbstractGraphicalEditPart {

    @Override
    protected IFigure createFigure() {
        IFigure figure = new BlockFigure();
        return figure;
    }

    @Override
    protected void createEditPolicies() {
        // TODO Auto-generated method stub

    }

}

MyEditorInput.java

package kr.co.hoony.test.example;

import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IPersistableElement;

public class MyEditorInput implements IEditorInput {

    public String name = null;

    public MyEditorInput(String name){
        this.name = name;
    }

    @Override
    public Object getAdapter(Class adapter) {
        return null;
    }

    @Override
    public boolean exists() {
        return (this.name != null);
    }

    @Override
    public boolean equals(Object o) {
        if(!(o instanceof MyEditorInput))
            return false;
        return ((MyEditorInput)o).getName().equals(this.getName());
    }

    @Override
    public ImageDescriptor getImageDescriptor() {
        return ImageDescriptor.getMissingImageDescriptor();
    }

    @Override
    public String getName() {
        return this.name;
    }

    @Override
    public IPersistableElement getPersistable() {
        return null;
    }

    @Override
    public String getToolTipText() {
        return this.name;
    }

}

MyGraphicalEditor.java

package kr.co.hoony.test.example;

import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.gef.DefaultEditDomain;
import org.eclipse.gef.ui.parts.GraphicalEditor;

public class MyGraphicalEditor extends GraphicalEditor {

    public static final String ID = "kr.co.hoony.test.example.MyGraphicalEditor";

    public MyGraphicalEditor() {
        setEditDomain(new DefaultEditDomain(this));
    }

    @Override
    protected void initializeGraphicalViewer() {
        // TODO Auto-generated method stub

    }

    @Override
    public void doSave(IProgressMonitor monitor) {
        // TODO Auto-generated method stub

    }

}

私が作ったラベルが効果を発揮しない理由がわかりません。私がまだ聞き取れていない点を教えてくれる人はいますか?

4

1 に答える 1

0

EditPartFactory をエディター クラスにリンクする必要があります。

public void initializeGraphicalViewer() {
    GraphicalViewer viewer = getGraphicalViewer();
    //here you set the content of the viewer with your model
           viewer.setContents(getModel());
}

public void configureGraphicalViewer() {
    super.configureGraphicalViewer();
    GraphicalViewer viewer = getGraphicalViewer();
    //link the EditPartFactory to the editor
           viewer.setEditPartFactory(new BlockEditPartFactory());
}

適切な IEditorInput を実装する義務はありません。最初にこのテーマに関するチュートリアルを読むことを強くお勧めします

これはにとって良いスタートでした

于 2013-07-15T14:31:09.113 に答える