Перерисовать график на JUNG - PullRequest
3 голосов
/ 21 мая 2011

Я строю график, используя 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);

Теперь я хочу добавить больше вершин и ребер в граф ... как я могу это сделатьэтот?Какие инструкции я должен выполнить для перерисовки графика?Спасибо!

Ответы [ 3 ]

5 голосов
/ 19 января 2012

После добавления ребер и вершин на график вы должны вызвать vv.repaint(), чтобы нарисовать изменения.

1 голос
/ 31 мая 2011

Если вы хотите перерисовать график после взаимодействия с пользователем, вы должны добавить EditingModalGraphMouse к вашему VisualizationViewer

    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

1 голос
/ 23 мая 2011

Если вы хотите добавить вершины и ребра:

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

Например, посмотрите, как addVertex и addEdge используется в SimpleGraphView.java

...