JGraphX:重新定位顶点

时间:2017-04-18 13:23:11

标签: java jgraphx

我有一个包含18个顶点和许多边的图。由于所涉及的元素数量及其结构,可用的内置算法(即用于所示图像的mxHierarchicalLayout)未按预期工作,导致大多数边缘与描述重叠,如图所示 Current status sample

在源代码中进行一些测试和检查我设法通过mxCell的几何图形改变边缘上的一些东西:

  • Edge lable
  • 控制点

但是我没有找到任何方法来操纵源和目标终端的点。任何人都可以建议我使用适当的类/方法来控制终端应该连接的位置。

任何帮助/信息都将不胜感激。

我设法测试以操纵边缘的代码如下:

..
    Arrays.asList(edges).stream().map(edge -> (mxCell) edge).forEach(edge -> {
            mxGeometry newGeo = (mxGeometry) edge.getGeometry().clone();
            // TODO calculate condition
            // This code actually move the label from the default
            // position
            mxPoint offset = new mxPoint(edge.getGeometry().getPoint().getX() + EDGE_OFFSET,
                    edge.getGeometry().getPoint().getY() + EDGE_OFFSET);
            newGeo.setOffset(offset);
            newGeo.setX(newGeo.getX() + 1);
            if (newGeo.getPoints() != null) {
                newGeo.getPoints().forEach(point -> {
                    point.setX(point.getX() + 200);
                    point.setY(point.getY() + 200);
                });
            }
            model.setGeometry(edge,newGeo);
    });

谢谢和问候

1 个答案:

答案 0 :(得分:0)

源端子和目标端子的位置根据电池的形状及其边界确定。这可以通过mxGraphView.getPerimeterPoint(cellState, point...)获得,并使用mxGraphView.getPerimeterFunctionmxGraphView.getPerimeterBounds

这适用于边标签的初始放置(我使用它来放置多个边标签 - 例如UML类图中的基数)。

但是,此方法使用mxCellState,出于某种原因,我还不知道在移动事件中使用mxEventListener重新定位时无法使用它。当事件被触发时,单元状态仍然设​​置在单元格的前一个位置。