#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().