2

マウスでグラフ/ネットワークを描画できる小さなグラフ エディタを jung で開発しました。描画するパネルとして VisualizationViewer を使用します。VisualizationViewer は、含まれる GraphLayout を介して表示する必要があるグラフを保持します。また、グラフをテキスト ファイルに保存する保存関数もあります。

public void saveGraph(){
    Graph<V, E> g = visualizationviewer.getGraphLayout.getGraph();
    // save g into text file
}

いくつかのアルゴリズムを使用して新しいグラフ オブジェクトを生成するクラスを作成しました。

public Graph<V, E> generateGraph(){
    Graph<V, E> g = new DirectedSparseGraph<V, E>();
    // do some algorithms on g
    return g
}

生成されたグラフを次の方法で表示したい場合:

...
visualisationviewer.getGraphLayout.setGraph(generateGraph());
...

新しいグラフは完全に表示され、さらに描画することができます。

しかし、保存関数 (および VisualizationViewer の基になる Graph オブジェクトを使用する他のすべての関数) は、適切に機能しなくなりました。ノードが 1 つしか認識されていないか、ノードが認識されていません (NullPointerException が発生します)。基になる Graph データ構造を取得するたびに、次を使用します。

visualizationviewer.getGraphLayout.getGraph();

私はここに何か欠けていますか?それとも、フレームワーク内に修正されていない既知のバグがありますか? 基になるオブジェクトのプログラムによる取得がそうではないのに、光学部分が完全に機能しているのは奇妙に思えます。

4

1 に答える 1

1

arrayList問題は、最初に頂点を追加し、そのリストからグラフに追加するという 2 つの手順で頂点を追加したことです。プログラムはヌルポインタ例外を避けるために動的に動作するため、次のようにノードを追加する必要があります。

Node node;           
g.addVertex(node = nodefactory.create());
nodes.add(node);

このようにして、引き続き使用できますarrayList(nodes)が、エラーを回避できます。

2 番目のエラーは、視覚化ビューアが新しいグラフのノードを認識しないため、ノードの名前を比較し、古いノードから位置を取得して正しく取得する必要があることです。

それはまったく役に立たないと思います..経由ではなく、直接
追加することに注意してください;-)PDEEdgesNodesArrayList

于 2011-11-29T00:35:41.147 に答える