简体   繁体   English

JUNG:更改顶点颜色

[英]JUNG : Changing the vertex colour

I have used JUNG library to visualize one network consisted of servers and links through graph. 我使用了JUNG库来可视化一个由服务器和通过链接组成的网络。

So I initialize my graph like this, Server and Link are classes in my project: 所以我像这样初始化我的图,Server和Link是我项目中的类:

            Graph<Server, Link> g;

    g = new SparseMultigraph<Server, Link>();

Now I need to change the color of specific vertices.. so I used the code below: 现在,我需要更改特定顶点的颜色..因此,我使用了以下代码:

// Setup up a new vertex to paint transformer //设置新的顶点以绘制变形器

    Transformer<Integer,Paint> vertexPaint = new Transformer<Integer,Paint>() {
        public Paint transform(Integer i) {
            return Color.GREEN;
        }
    };

    vv.getRenderContext().setVertexFillPaintTransformer(vertexPaint);

I got java.lang.ClassCastException exception as following!! 我有如下的java.lang.ClassCastException异常!

  Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: network.Server cannot be cast to java.lang.Integer
at GUI.GUI$9.transform(GUI.java:1)
at edu.uci.ics.jung.visualization.renderers.BasicVertexRenderer.paintShapeForVertex(BasicVertexRenderer.java:98)
at edu.uci.ics.jung.visualization.renderers.BasicVertexRenderer.paintIconForVertex(BasicVertexRenderer.java:74)
at edu.uci.ics.jung.visualization.renderers.BasicVertexRenderer.paintVertex(BasicVertexRenderer.java:37)
at edu.uci.ics.jung.visualization.renderers.BasicRenderer.renderVertex(BasicRenderer.java:70)
at edu.uci.ics.jung.visualization.renderers.BasicRenderer.render(BasicRenderer.java:55)
at edu.uci.ics.jung.visualization.BasicVisualizationServer.renderGraph(BasicVisualizationServer.java:367)
at edu.uci.ics.jung.visualization.BasicVisualizationServer.paintComponent(BasicVisualizationServer.java:321)
at javax.swing.JComponent.paint(Unknown Source)

My complete code to update the graph is here: 我用于更新图形的完整代码在这里:

private static BasicVisualizationServer updateGraph(Network network) { 私有静态BasicVisualizationServer updateGraph(网络){

            Set<Server> servers = network.getServers();
    Set<Link> links = network.getLinks();
            Graph<Server, Link> g;
    // Graph<V, E> where V is the type of the vertices and E is the type of
    // the edges
    g = new SparseMultigraph<Server, Link>();
    // Add some vertices and edges
    for (Server server : servers) {
        g.addVertex(server);
    }

    int i = 0;
    for (Link link : links) {
        g.addEdge(link, link.getSource(), link.getDest(), EdgeType.DIRECTED);
        i++;
    }


    // Layout<V, E>, VisualizationViewer<V,E>
    Layout<Integer, String> layout = new CircleLayout(g);
    layout.setSize(new Dimension(300, 300));
    VisualizationViewer<Integer, String> vv = new VisualizationViewer<Integer, String>(
            layout);
    vv.setPreferredSize(new Dimension(350, 350));
    // Show vertex and edge labels
    vv.getRenderContext().setVertexLabelTransformer(new ToStringLabeller());
    vv.getRenderContext().setEdgeLabelTransformer(new ToStringLabeller());

     // Setup up a new vertex to paint transformer...
    Transformer<Integer,Paint> vertexPaint = new Transformer<Integer,Paint>() {
        public Paint transform(Integer i) {
            return Color.GREEN;
        }
    };

    vv.getRenderContext().setVertexFillPaintTransformer(vertexPaint);

    // Create a graph mouse and add it to the visualization component
    DefaultModalGraphMouse gm = new DefaultModalGraphMouse();
    gm.setMode(ModalGraphMouse.Mode.TRANSFORMING);
    vv.setGraphMouse(gm);


    rightPanel.setTopComponent(vv);

    //Detecting selection of vertices
    final PickedState<Integer> pickedState = vv.getPickedVertexState();

    // Attach the listener that will print when the vertices selection changes.
    pickedState.addItemListener(new ItemListener() {

        @Override
        public void itemStateChanged(ItemEvent e) {
        Object subject = e.getItem();
            // The graph uses Integers for vertices.
            if (subject instanceof Integer) {
                Integer vertex = (Integer) subject;
                if (pickedState.isPicked(vertex)) {
                    System.out.println("Vertex " + vertex
                        + " is now selected");
                } else {
                    System.out.println("Vertex " + vertex
                        + " no longer selected");
                }
            }
        }
    });

    return vv;
}

Your graph vertex type is Server , but your Transformer is expecting an Integer as input. 您的图形顶点类型是Server ,但是您的Transformer希望输入一个Integer You need to alter your code so that those match. 您需要更改代码以使它们匹配。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM