【问题标题】:JGraphX - Getting all target cells of a cellJGraphX - 获取单元格的所有目标单元格
【发布时间】:2016-03-17 13:15:04
【问题描述】:

所以,我已经成功地完全使用 JGraphX 可视化了一个图形。现在,我想创建一个邻接矩阵。我能想到的一种方法是获取特定单元格目标(或指向)的所有单元格以及所有它的父单元格。但是,我似乎无法从文档中找到合适的 JGraphX 方法。

实际上有任何 JGraphX 方法吗?否则,您是否可以建议任何替代方式或方法?

谢谢。

不知何故,我已经想出了办法。但我会留下这个问题以防其他人需要它。

我的方法: 我创建了两个ArrayList,matrixListFrom 和matrixListTo。每次连接边时,我都会将顶点一的标签添加到 matrixFrom 并将顶点二的标签添加到 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 中,命名为 vertices

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。

但是我认为这种方法并不是很有效,尤其是在删除顶点时。但不知何故,我设法让它发挥了作用。

【问题讨论】:

  • 如果您有其他方法,为什么不将其作为答案发布呢?它可能对其他人有用...
  • @NiekeAerts 因为我认为它不是很有效。但是好的,我会发布它

标签: java jgraphx


【解决方案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;
}

【讨论】:

  • 其实我已经做了一些方法但是谢谢你的回答!我会投赞成票:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-25
  • 1970-01-01
  • 2013-05-01
  • 1970-01-01
  • 2019-03-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多