Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Eclipse plugin 如何在eclipse RCP中使用draw2d在编辑器上绘制一些图形?_Eclipse Plugin_Eclipse Rcp_Eclipse Gef_Draw2d - Fatal编程技术网

Eclipse plugin 如何在eclipse RCP中使用draw2d在编辑器上绘制一些图形?

Eclipse plugin 如何在eclipse RCP中使用draw2d在编辑器上绘制一些图形?,eclipse-plugin,eclipse-rcp,eclipse-gef,draw2d,Eclipse Plugin,Eclipse Rcp,Eclipse Gef,Draw2d,我的意思是画一些简单的形状,如圆形、矩形和多段线。似乎必须在画布(如外壳)上构建轻量级系统。在RCP应用程序中,当我添加编辑器的扩展时,默认情况下,编辑器扩展org.eclipse.ui.part.EditorPart。它有一个名为createPartControl的方法。此方法有一个参数(复合父级) 因此,我编写了以下代码,它给了我一个未处理的事件循环异常 public void createPartControl(复合父级){ Shell=parent.getShell(); shell.o

我的意思是画一些简单的形状,如圆形、矩形和多段线。似乎必须在画布(如外壳)上构建轻量级系统。在RCP应用程序中,当我添加编辑器的扩展时,默认情况下,编辑器扩展org.eclipse.ui.part.EditorPart。它有一个名为createPartControl的方法。此方法有一个参数(复合父级)

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

public void createPartControl(复合父级){
Shell=parent.getShell();
shell.open();
Display Display=shell.getDisplay();
LightweightSystem lws=新的LightweightSystem(壳牌);
i图形面板=新图形();
lws.setContents(面板);
矩形图节点1=新矩形图();
矩形图节点2=新矩形图();
node1.setBackgroundColor(ColorConstants.red);
节点1.立根(新矩形(30,30,64,36));
node2.setBackgroundColor(ColorConstants.blue);
node2.setBounds(新矩形(10010064,36));
PolylineConnection conn=新的PolylineConnection();
连接设置震源锚(新ChopboxAnchor(节点1));
conn.setTargetAnchor(新ChopboxAnchor(节点2));
conn.setTargetDecoration(新polygondcoration());
标签=新标签(“中点”);
label.set不透明(true);
标签.setBackgroundColor(颜色常数.buttonLightest);
label.setboorder(newlineborder());
conn.add(标签,新中点定位器(conn,0));
面板。添加(节点1);
面板。添加(节点2);
面板。添加(康涅狄格州);
而(!shell.isDisposed()){
如果(!display.readAndDispatch())
display.sleep();
}
}

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

当您想在编辑器中绘制时,您不需要像在独立的SWT应用程序中那样创建新的Shell,也不需要从事件队列中分派事件;只需创建一个画布并绘制到其中。这将有助于您:

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);
}

当您想要在编辑器中绘制时,您不需要像在独立SWT应用程序中那样创建新的Shell,也不需要从事件队列中分派事件;只需创建一个画布并绘制到其中。这将有助于您:

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);
}

您似乎复制并粘贴了一个swt示例,该示例在jface编辑器类中显示了一个带有绘制画布的窗口是的,此示例在一个带有main方法的类中成功运行。我希望它可以在作为插件扩展的编辑器中使用。请使用父级创建画布,然后将该画布传递给LightweightSystem。删除所有不需要的外壳/显示代码做得很好。它可以工作!太多了!好家伙,欢迎你;我在回答中转换了注释以供您接受。您似乎复制并粘贴了一个swt示例,该示例在jface编辑器类中显示了一个带有绘制画布的窗口。是的,此示例在一个带有main方法的类中成功运行。我希望它可以在作为插件扩展的编辑器中使用。使用parent创建画布,然后将画布传递给LightweightSystem。删除所有不需要的外壳/显示代码做得很好。它可以工作!太多了!好家伙,欢迎你;我把评论转换成一个答案,让你接受。