0

我有要绘制的节点列表。这里节点的意思是RectangleFigure。因此,所有这些节点都首先绘制在 canvas( FigureCanvas) 上,然后我维护了一张地图,该地图在之前绘制的节点之间具有依赖关系。在地图中,键是节点,值只是维护的节点列表。

例如有3个节点,[ClassA, ClassB, InterfaceC]

我把它们画在画布上。我的地图如下所示: [ClassA=[ClassB], ClassB=[InterfaceC]] 所以,它的意思是ClassA extends ClassBand ClassB implements InterfaceC

现在,我想PolylineConnection在已经绘制的节点之间绘制,使用维护的地图。那么,我该如何进行呢?

任何指针都非常感谢,在此先感谢!

4

2 回答 2

1

尝试了解决问题的方法,并且奏效了。因此,为自己的问题添加答案。

步骤如下:- 1. 考虑问题本身的例子。有 3 个节点,[ClassA, ClassB, InterfaceC],我们在这些节点中有一个关系图,因为 [ClassA=[ClassB], ClassB=[InterfaceC]] 表示ClassA extends ClassBClassB implements InterfaceC

  1. 一次从地图中取出一个键,然后将该节点作为PolylineConnection.
  2. 然后对于相同的源(地图中的键),一一获取值的节点作为目标节点。
  3. 现在,由于我们同时拥有源节点和目标节点,我们可以使用Anchors

获取节点的逻辑如下:-

  1. 在一个列表中获取画布上绘制的所有子节点,如果子节点是类型RectangleFigure(节点),则比较给它的标签我们可以获取所需的节点。

代码片段以获得更多说明

private RectangleFigure fetchNode(String node_label) {
        RectangleFigure emptyNode = new RectangleFigure();
        // get the list of nodes drawn on canvas
        @SuppressWarnings("rawtypes")
        List childrens = panel.getChildren();  //private IFigure panel;

        for (int count = 0; count < childrens.size(); count++) {
            if (childrens.get(count) instanceof RectangleFigure) {
                RectangleFigure node = (RectangleFigure) childrens.get(count);
                @SuppressWarnings("rawtypes")
                List node_children = node.getChildren();
                for (int count2 = 0; count2 < node_children.size(); count2++) {
                    if (node_children.get(count2) instanceof Label) {
                        Label lbl = (Label) node_children.get(count2);
                        if (lbl.getText().equals(node_label)) {
                            return node;
                        }
                    }
                }
            }
        }

        return emptyNode;
    }
于 2014-01-22T10:40:36.597 回答
1

作为 draw2d 项目的一部分,有许多示例。在此处查看详细信息:http: //nyssen.blogspot.de/2010/12/draw2d-examples-hidden-treasure.html

于 2014-01-12T11:26:05.330 回答