在JUNG上重新绘制图表

3

我使用JUNG(Java通用网络/图形框架)构建了一个图形,代码如下:

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

在向图形中添加边缘和顶点后,您必须调用vv.repaint()来绘制更改。


1
如果你想要添加顶点和边:
//add some Vertex and Edges
g.addVertex((BusStop)obj1);
g.addVertex((BusStop)obj2);
g.addEdge((Travel) trv1, obj1, obj2);

例如,查看如何在SimpleGraphView.java中使用addVertexaddEdge

我知道 :) 我的问题是当我移动滚动条时,图表只会刷新。谢谢。 - notGeek
添加节点后,请调用 vv.repaint()。 - Sami

1
如果您想在用户交互后重新绘制图形,则必须将 EditingModalGraphMouse 添加到您的 VisualizationViewer 中。
    EditingModalGraphMouse gm = new EditingModalGraphMouse(vv.getRenderContext(), 
             vertexFactory, edgeFactory); 
    vv.setGraphMouse(gm);

构造函数必须接受从vertexFactoryedgeFactory派生的对象。
Factory<E> and Factory<V>

这个工作是通过create()方法创建一个新的edge/vertices类的实例

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

对于edgeFactory也是一样的


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接