Показать веса в JgraphT - PullRequest
       9

Показать веса в JgraphT

5 голосов
/ 25 сентября 2008

Я реализовал этот график:

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

Чтобы показать, что говорит название класса; простой слушаемый направленный взвешенный граф. Я хочу изменить метку краев и вместо формата

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

Я хочу показать вес ребра. Я понимаю, что все действия на узлах, например, метод getEdgesWeight() делегируется от графа, а не от края. Как я могу показать вес ребра? Нужно ли как-то переходить в Графе к краю?

Любая помощь приветствуется.

1 Ответ

2 голосов
/ 03 декабря 2008

Я предполагаю, что класс 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);
}

И, наконец, что не менее важно, переопределите метод toString класса MyWeightedEdge , чтобы вернуть метку, которую должен иметь ребро (предположительно включая вес, который теперь доступен к нему).

Надеюсь, это поможет.

...