3

次のコードで JUNG (Java Universal Network/Graph Framework) を使用してグラフを作成します。

g = new SparseMultigraph<BusStop, Travel>();

//add some Vertex and Edges

Layout<String, String> layout1 = new CircleLayout(g);
layout1.setSize(new Dimension(300,300)); // sets the initial size of the layout space

VisualizationViewer vv = new VisualizationViewer(layout1);
vv.setPreferredSize(new Dimension(350,350)); //Sets the viewing area size

Transformer<BusStop,Paint> vertexPaint = new Transformer<BusStop,Paint>() {
    public Paint transform(BusStop b) {
        return Color.GREEN;
    }
};

Transformer<BusStop,Shape> vertexShape = new Transformer<BusStop,Shape>() {
    public Shape transform(BusStop b) {
        return new Rectangle(-20, -10, 40, 20);
    }
};

vv.getRenderContext().setVertexFillPaintTransformer(vertexPaint);
vv.getRenderContext().setVertexShapeTransformer(vertexShape);
vv.getRenderContext().setVertexLabelTransformer(new ToStringLabeller());
vv.getRenderer().getVertexLabelRenderer().setPosition(Position.CNTR);

GraphViewerForm = new edu.uci.ics.jung.visualization.GraphZoomScrollPane(vv);

ここで、グラフに頂点とエッジを追加したいのですが、どうすればよいですか? グラフを再描画するには、どのような命令を実行する必要がありますか? ありがとう!

4

3 に答える 3

5

グラフにエッジと頂点を追加した後vv.repaint()、変更を描画するために呼び出す必要があります。

于 2012-01-19T12:48:59.527 に答える
1

ユーザーの操作後にグラフを再描画する場合は、 VisualizationViewerにEditingModalGraphMouseを追加する必要があります。

    EditingModalGraphMouse gm = new EditingModalGraphMouse(vv.getRenderContext(), 
             vertexFactory, edgeFactory); 
    vv.setGraphMouse(gm);

コンストラクターには、から派生したvertexFactoryおよびedgeFactoryオブジェクトを供給する必要があります

Factory<E> and Factory<V>

その仕事は、create()メソッドを介してエッジ/頂点クラスの新しいインスタンスを作成することです

Factory <BusStop> vertexFactory = new Factory<BusStop>() {
            public BusStop create() {
                return new BusStop();
            }
        };

edgeFactoryについても同じです

于 2011-05-30T21:55:11.213 に答える
1

頂点とエッジを追加する場合:

//add some Vertex and Edges
g.addVertex((BusStop)obj1);
g.addVertex((BusStop)obj2);
g.addEdge((Travel) trv1, obj1, obj2);

たとえば、SimpleGraphView.java でaddVertexaddEdgeがどのように使用されているかを確認してください。

于 2011-05-22T22:50:33.280 に答える