JUNG中更改顶点的大小/颜色

13

如何在Jung可视化库中更改特定顶点的大小?

我正在阅读文档,但我对Java不是非常熟悉,也找不到任何好的在线示例。


我之前研究过JUNG,如果你不熟悉Java的话,我不建议使用它——文档很糟糕,用户群几乎不存在。话虽如此,你用的是哪个版本?如果可能的话,能否指出具体的jar包?代码已经有了很大的变化。 - Allen Z.
Allen,我为一个没有用户群体的JUNG库收到了很多问题。 :) 如果您希望看到文档的特定方面得到改进,请在网络论坛或jung-support列表中发布相关内容。 - Joshua O'Madadhain
2个回答

29

我花了一些时间,但现在有一个易读、完全注释的程序可用于更改图形中的顶点大小和颜色。请享受!

public class SimpleGraphView {
    public SimpleGraphView() {
        // Create a graph with Integer vertices and String edges
        Graph<Integer, String> g = new SparseGraph<Integer, String>();
        for(int i = 0; i < 5; i++) g.addVertex(i);
        g.addEdge("Edge", 1, 2);
        g.addEdge("Another Edge", 1, 4);

        // Layout implements the graph drawing logic
        Layout<Integer, String> layout = new CircleLayout<Integer, String>(g);
        layout.setSize(new Dimension(300,300));

        // VisualizationServer actually displays the graph
        BasicVisualizationServer<Integer,String> vv = new BasicVisualizationServer<Integer,String>(layout);
        vv.setPreferredSize(new Dimension(350,350)); //Sets the viewing area size

        // Transformer maps the vertex number to a vertex property
        Transformer<Integer,Paint> vertexColor = new Transformer<Integer,Paint>() {
            public Paint transform(Integer i) {
                if(i == 1) return Color.GREEN;
                return Color.RED;
            }
        };
        Transformer<Integer,Shape> vertexSize = new Transformer<Integer,Shape>(){
            public Shape transform(Integer i){
                Ellipse2D circle = new Ellipse2D.Double(-15, -15, 30, 30);
                // in this case, the vertex is twice as large
                if(i == 2) return AffineTransform.getScaleInstance(2, 2).createTransformedShape(circle);
                else return circle;
            }
        };
        vv.getRenderContext().setVertexFillPaintTransformer(vertexColor);
        vv.getRenderContext().setVertexShapeTransformer(vertexSize);

        JFrame frame = new JFrame("Simple Graph View");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(vv); 
        frame.pack();
        frame.setVisible(true);    
    }

    public static void main(String[] args) {
        new SimpleGraphView();
    }
}

3

1
您可以在此处找到此示例的最新源代码:https://github.com/jrtom/jung/blob/master/jung-samples/src/main/java/edu/uci/ics/jung/samples/PluggableRendererDemo.java - amoebe

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