如何在eclipse RCP中使用draw2d在编辑器上绘制一些数字?

时间:2013-01-22 03:38:55

标签: eclipse-plugin eclipse-rcp eclipse-gef draw2d

我的意思是绘制somg简单的形状,如circle,rectangleFigure和polylineConnectistrong。似乎必须在Canvas(如Shell)上构建LightweightSystem。当我添加编辑器的扩展名时,编辑器中的RCP应用程序默认情况下扩展org.eclipse.ui.part.EditorPart。它有一个名为 createPartControl 的方法。这个方法有一个参数(复合父级)。

所以我编写了以下代码,它给了我一个未处理的事件循环异常

public void createPartControl(Composite parent) {
    Shell shell = parent.getShell();
    shell.open();
    Display display = shell.getDisplay();
    LightweightSystem lws = new LightweightSystem(shell);
    IFigure panel = new Figure();
    lws.setContents(panel);
    RectangleFigure node1 = new RectangleFigure();
    RectangleFigure node2 = new RectangleFigure();
    node1.setBackgroundColor(ColorConstants.red);
    node1.setBounds(new Rectangle(30, 30, 64, 36));
    node2.setBackgroundColor(ColorConstants.blue);
    node2.setBounds(new Rectangle(100, 100, 64, 36));
    PolylineConnection conn = new PolylineConnection();
    conn.setSourceAnchor(new ChopboxAnchor(node1));
    conn.setTargetAnchor(new ChopboxAnchor(node2));
    conn.setTargetDecoration(new PolygonDecoration());
    Label label = new Label("Midpoint");
    label.setOpaque(true);
    label.setBackgroundColor(ColorConstants.buttonLightest);
    label.setBorder(new LineBorder());
    conn.add(label, new MidpointLocator(conn, 0));
    panel.add(node1);
    panel.add(node2);
    panel.add(conn);
    while (!shell.isDisposed ()) { 
        if (!display.readAndDispatch ()) 
           display.sleep (); 
    }
}

那么如何解决这个问题以及如何在编辑器上绘制这些数字?

1 个答案:

答案 0 :(得分:1)

如果您想在编辑器中绘制,您不需要像在独立的SWT应用程序中那样创建新的Shell,也不需要从事件队列中调度事件;只需创建一个Canvas并绘制到其中。这应该可以帮到你:

public void createPartControl(Composite parent) {
    Canvas canvas = new Canvas(parent, SWT.NONE);
    LightweightSystem lws = new LightweightSystem(canvas);
    IFigure panel = new Figure();
    lws.setContents(panel);
    [...]
    panel.add(node1);
    panel.add(node2);
    panel.add(conn);
}