Перерисовать график на JUNG

#java #graph #jung

#java #График #jung

Вопрос:

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

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

Ответ №1:

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

Ответ №2:

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

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

конструктор должен быть снабжен объектами vertexFactory и EdgeFactory, производными от

 Factory<E> and Factory<V>
  

чья работа заключается в создании нового экземпляра класса edge / vertices с помощью метода create()

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

то же самое для EdgeFactory

Ответ №3:

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

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

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

Комментарии:

1. Я знаю это 🙂 Моя проблема в том, что график обновляется только при перемещении полосы прокрутки.. Спасибо

2. После добавления узлов вызовите vv.repaint().