JGraphX - 获取细胞的所有靶细胞

时间:2016-03-12 09:07:44

标签: java jgraphx

所以,我已经成功地使用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>

但是我觉得这个方法并不是很有效,特别是在删除顶点时。但不知怎的,我设法让它发挥作用。

1 个答案:

答案 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;
}