在JgraphT中显示权重

时间:2020-03-06 14:44:00  来源:igfitidea点击:

我已经实现了这个图:

ListenableDirectedWeightedGraph<String, MyWeightedEdge> g = 
    new ListenableDirectedWeightedGraph<String, MyWeightedEdge>(MyWeightedEdge.class);

为了显示类名的含义;一个简单的可听的有向加权图。我想更改边缘的标签,而不是格式

return "(" + source + " : " + target + ")";

我希望它显示边缘的重量。我意识到节点上的所有动作,例如getEdgesWeight()方法是从图形而非边缘委托的。如何显示边缘的重量?我是否必须以某种方式将图传递到边缘?

任何帮助表示赞赏。

解决方案

我假设类MyWeightedEdge已经包含一个方法,例如

public void setWeight(double weight)

如果确实如此,那么我们需要做的是:

从ListenableDirectedWeightedGraph派生自己的子类(例如,ListenableDirectedWeightedGraph)。我将添加两个构造函数版本,委派为" super"以确保与原始类的兼容性。

按照问题创建图形,但使用新类

ListenableDirectedWeightedGraph g = 
    new CustomListenableDirectedWeightedGraph(
        MyWeightedEdge.class);

重写方法setEdgeWeight,如下所示:

public void setEdgeWeight(E e, double weight) {
    super.setEdgeWeight(e, weight);
    ((MyWeightedEdge)e).setWeight(weight);
}

最后但并非最不重要的一点是,重写MyWeightedEdge类的toString方法以返回希望边缘具有的标签(大概包括权重,现在可以使用它了)。

我希望这有帮助。