所以,我已经成功地使用JGraphX可视化了一个图形。现在,我想创建一个邻接矩阵。我能想到的一种方法是让所有细胞成为特定细胞的目标(或指向)以及它所有的细胞。但是,我似乎无法从文档中找到合适的JGraphX方法。
实际上是否有任何JGraphX方法?否则,您可以建议任何其他方式或方法吗?
谢谢。
我已经想办法了。但是我会留下这个问题以防其他人需要它。
我的方法:
我创建了两个ArrayList
,matrixListFrom和matrixListTo。每当我连接边时,我会将顶点1的标签添加到matrixFrom,将顶点2的标签添加到matrixTo。然后我将它与此方法联系起来:
public int createAdjacencyMatrix(int adMatrix, String strFromVertex, String strToVertex)
{
for(int k = 0;k<matrixListFrom.size();++k)
{
if((matrixListFrom.get(k)).equals(strFromVertex) && (matrixListTo.get(k)).equals(strToVertex))
{
adMatrix = 1;
break;
}
else if((matrixListFrom.get(k)).equals(strToVertex) && (matrixListTo.get(k)).equals(strFromVertex))
{
adMatrix = -1;
for(int j = 0;j<matrixListFrom.size();++j)
{
if((matrixListFrom.get(j)).equals(strFromVertex) && (matrixListTo.get(j)).equals(strToVertex))
{
adMatrix = 1;
break;
}
}
break;
}
else if(!(matrixListFrom.get(k)).equals(strFromVertex) && !(matrixListTo.get(k)).equals(strToVertex))
{
adMatrix = 0;
}
else if(strFromVertex.equals(strToVertex))
{
adMatrix = 0;
break;
}
else
{
adMatrix = 0;
}
}
return adMatrix;
}
假设我们将顶点A,B,C,D,E存储在ArrayList
中,命名为顶点
matrixListFrom
由{A,C,D E}组成
matrixListTo由{D,E,C,B}
这意味着A - > D,C - > E,D - > C,E - > B
因此,使用该方法,逐个检查这两个列表的内容。
strFromVertex
等于第0列中的顶点,strToVertex
是使用for循环从后续列进行比较的相应顶点。然后,使用两个矩阵列表,检查strFromVertex和strToVertex是否分别等于matrixListFrom和matrixListTo。如果它们完全相等则返回1,如果它们相反(第二个if)它返回-1(这意味着第0列中的顶点是终端而不是源),如果根本没有连接,则返回0。 / p>
但是我觉得这个方法并不是很有效,特别是在删除顶点时。但不知怎的,我设法让它发挥作用。
答案 0 :(得分:1)
据我所知,JGraphX没有内置选项,但您可以使用这个简单的方法:
public static Set<mxICell> getTargetCells(mxICell input)
{
if(input == null)
return Collections.emptySet();
int count = input.getEdgeCount();
Set<mxICell> result = new HashSet<mxICell>(count, 1);
for(int i = 0; i < count; i++)
{
mxICell tmp = input.getEdgeAt(i);
if(tmp instanceof mxCell && ((mxCell)tmp).getSource() == input)
{
result.add(tmp);
}
}
return result;
}