Java JUNG:更改顶点颜色

Java JUNG:更改顶点颜色,java,jung,Java,Jung,我曾使用JUNG library通过图形将一个由服务器和链接组成的网络可视化 所以我像这样初始化我的图,服务器和链接是我项目中的类: Graph<Server, Link> g; g = new SparseMultigraph<Server, Link>(); 我更新图表的完整代码如下: 专用静态基本可视化服务器更新图(网络){ Set servers=network.getServers(); Set links=network.g

我曾使用JUNG library通过图形将一个由服务器和链接组成的网络可视化

所以我像这样初始化我的图,服务器和链接是我项目中的类:

            Graph<Server, Link> g;

    g = new SparseMultigraph<Server, Link>();
我更新图表的完整代码如下:

专用静态基本可视化服务器更新图(网络){

Set servers=network.getServers();
Set links=network.getLinks();
图g;
//图中V是顶点的类型,E是顶点的类型
//边缘
g=新的SparseMultraph();
//添加一些顶点和边
用于(服务器:服务器){
g、 addVertex(服务器);
}
int i=0;
用于(链接:链接){
g、 addEdge(link,link.getSource(),link.getDest(),EdgeType.DIRECTED);
i++;
}
//布局,可视化查看器
布局=新的环形布局(g);
布局。设置尺寸(新尺寸(300300));
VisualizationViewer vv=新建VisualizationViewer(
布局);
vv.setPreferredSize(新尺寸(350350));
//显示顶点和边标签
vv.getRenderContext().setVertexLabelTransformer(新ToStringLabeler());
vv.getRenderContext().setEdgeLabelTransformer(新的ToStringLabeller());
//设置一个新顶点以绘制变换器。。。
Transformer vertexPaint=新的Transformer(){
公共绘制变换(整数i){
返回颜色。绿色;
}
};
vv.getRenderContext().setVertexFillPaintTransformer(顶点绘制);
//创建图形鼠标并将其添加到可视化组件
DefaultModalGraphMouse gm=新的DefaultModalGraphMouse();
gm.setMode(ModalGraphMouse.Mode.TRANSFORMING);
vv.setGraphMouse(gm);
右面板。设置顶部组件(vv);
//检测顶点的选择
最终PickedState PickedState=vv.getPickedVertexState();
//附加将在顶点选择更改时打印的侦听器。
pickedState.addItemListener(新的ItemListener(){
@凌驾
公共无效itemStateChanged(ItemEvent e){
Object subject=e.getItem();
//该图对顶点使用整数。
if(subject instanceof Integer){
整数顶点=(整数)主题;
if(pickedState.isPicked(顶点)){
System.out.println(“顶点”+顶点
+“现在被选中”);
}否则{
System.out.println(“顶点”+顶点
+“不再选定”);
}
}
}
});
返回vv;
}

您的图形顶点类型是
服务器
,但您的
转换器
需要一个
整数
作为输入。您需要修改代码,使之匹配。

什么版本?链接到图书馆?我在“当前”JUNG Javadocs中没有看到
转换器
绘制
。JUNG 2.0.1 JUNG 2依赖于其他三个库:JUnit、Colt和Common Collections。1.朱尼特:2。Commons Collections:这源于ApacheJakarta Commons Collections 3。Colt:
变压器
油漆
的完全限定类名?另外,请发布整个堆栈跟踪,而不仅仅是您得到的是
ClassCastException
.import org.apache.commons.collections15.Transformer;导入java.awt.Paint;好的…我会把完整的错误公布在你的帐户上。我知道这一点…但我需要将顶点类型作为服务器,而不是整数…因为这在我想要显示图形时有效,但在我想要更改顶点颜色时有问题!我没说你必须改变你的顶点类型。为什么您的
转换器
声明为
而不是
?我无法更改,因为setVertexFillPaintTransformer需要转换器作为输入!!如果图形是
,为什么要将
VisualizationViewer
声明为
?您是否在没有进行一致修改的情况下复制并粘贴了大量代码块?谢谢。实际上它是第一个整数和字符串,你是对的。我把它们都改了,现在可以用了!
    Transformer<Integer,Paint> vertexPaint = new Transformer<Integer,Paint>() {
        public Paint transform(Integer i) {
            return Color.GREEN;
        }
    };

    vv.getRenderContext().setVertexFillPaintTransformer(vertexPaint);
  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)
            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;
}