JgraphX如何使边缘将顶点连接到另一边(而不是另一个顶点)?

时间:2016-03-22 00:04:08

标签: java swing jgraphx

我希望能够使用边连接顶点和另一条边(连接另外两个顶点)。我想相应地更改代码,以便我能够从用户界面进行此连接(就像您对两个顶点所做的那样)。

为了说明我的目的:我希望从箭头尖端看到绿色方块变成蓝色(就像它底部的那个),表明建立了连接。

Screenshot of JgraphX situation

我已经检查了与创建连接和有效终端相关的文档和代码,但我无法实现我需要的行为,即能够将边缘设置为连接中的有效终端/有效目标。任何帮助将不胜感激。

在尝试使边缘成为有效的目标/来源时,我不确定这是否应该是我应该看的( mxGraph.java 类)。

public boolean isValidSource(Object cell)
{
    return (cell == null && allowDanglingEdges)
                    || (cell != null 
                           && (!model.isEdge(cell) || isConnectableEdges()) && isCellConnectable(cell));

}

更新:我能够使用图表的 insertEdge 方法在代码中连接两条边。但是,我仍然很难在用户界面中实现此行为。

2 个答案:

答案 0 :(得分:2)

我怀疑你的问题的解决方案要么我们要破坏图论(和jgraphx)的基本规则,要么你调整你的目标。如果你能解释你需要这种行为的理由,以及你是否可以接受任何替代方案,那将会有所帮助。

在数学中,单个边只能将两个顶点连接在一起(或将顶点连接到自身)。您无法使用边将边连接到顶点,并且jgraphx似乎遵循此设计。

如果您更关心图形的流动而不是数学表示,可以在边缘相交的所需位置添加新顶点,然后将适当的边连接到适当的顶点。我怀疑这是你正在寻找的,或者至少是你最好的选择。

如果您绝对需要您描述的行为,则可以重新定义您的术语并应用一些严重的抽象(以及大量编码)。您可能需要在jgraphx中手动实现一个新对象,它可以同时表现为顶点和边缘,并定义所有这些组件之间的关系等等。我不鼓励这样做,jgraphx似乎没有提供替代方案

如果您可以提供帮助,请不要更改图形理论以适应您的设计。改变您的设计以使用图论。祝你好运。

答案 1 :(得分:1)

您可以尝试解决方法: 假设你有顶点u,v和t以及连接(u,v)的边。

  • 删除边缘(u,v)
  • 添加不可见顶点(x)
  • 添加边缘u - > X
  • 添加边x - > v
  • 添加边缘t - > X

考虑到你必须从边缘(u,x)和(t,x)移除装饰器。