首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java JUNG -不兼容类型

Java JUNG -不兼容类型
EN

Stack Overflow用户
提问于 2018-12-02 12:57:36
回答 1查看 303关注 0票数 1

你好!我的节目有问题。

我在java中使用JUNG库,当我编译程序时,会得到以下两个错误:

代码语言:javascript
复制
Error:(43, 61) java: incompatible types: org.apache.commons.collections15.Transformer<java.lang.Integer,java.awt.Paint> cannot be converted to com.google.common.base.Function<? super java.lang.Integer,java.awt.Paint>

Error:(44, 56) java: incompatible types: org.apache.commons.collections15.Transformer<java.lang.String,java.awt.Stroke> cannot be converted to com.google.common.base.Function<? super java.lang.String,java.awt.Stroke>

我不知道这些错误对不兼容的数据类型意味着什么。我怎样才能解决这个问题?

提前谢谢你!

"GraphView“类:

代码语言:javascript
复制
import edu.uci.ics.jung.algorithms.layout.CircleLayout;
import edu.uci.ics.jung.algorithms.layout.Layout;
import edu.uci.ics.jung.visualization.BasicVisualizationServer;
import edu.uci.ics.jung.visualization.decorators.ToStringLabeller;
import edu.uci.ics.jung.visualization.renderers.Renderer;
import org.apache.commons.collections15.Transformer;
import javax.swing.*;
import java.awt.*;


public class GraphView {

    public GraphView() {

        GraphBuilding gb = new GraphBuilding(); // This builds the graph

        // Layout<V, E>, BasicVisualizationServer<V,E>
        Layout<Integer, String> layout = new CircleLayout(gb.g);

        layout.setSize(new Dimension(300, 300));
        BasicVisualizationServer<Integer, String> vv =
                new BasicVisualizationServer<Integer, String>(layout);
        vv.setPreferredSize(new Dimension(350, 350));

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

        // Set up a new stroke Transformer for the edges
        float dash[] = {10.0f};
        final Stroke edgeStroke = new BasicStroke(1.0f, BasicStroke.CAP_BUTT,
                BasicStroke.JOIN_MITER, 10.0f, dash, 0.0f);
        Transformer<String, Stroke> edgeStrokeTransformer =
                new Transformer<String, Stroke>() {
                    public Stroke transform(String s) {
                        return edgeStroke;
                    }
                };

        vv.getRenderContext().setVertexFillPaintTransformer(vertexPaint);
        vv.getRenderContext().setEdgeStrokeTransformer(edgeStrokeTransformer);
        vv.getRenderContext().setVertexLabelTransformer(new ToStringLabeller());
        vv.getRenderContext().setEdgeLabelTransformer(new ToStringLabeller());
        vv.getRenderer().getVertexLabelRenderer().setPosition(Renderer.VertexLabel.Position.CNTR);

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

}

"GraphBuilding“类:

代码语言:javascript
复制
import edu.uci.ics.jung.graph.Graph;
import edu.uci.ics.jung.graph.SparseGraph;
import edu.uci.ics.jung.graph.util.EdgeType;


public class GraphBuilding {
    // Graph<V, E> where V is the type of the vertices
    // and E is the type of the edges
    public Graph<String, String> g = new SparseGraph<String, String>();

    public GraphBuilding() {

        // Add some vertices. From above we defined these to be type Integer.
        g.addVertex("A");
        g.addVertex("B");
        g.addVertex("C");

        // Add some edges. From above we defined these to be of type String
        // Note that the default is for undirected edges.
        g.addEdge("Edge-1", "A", "B", EdgeType.DIRECTED); // Note that Java 1.5 auto-boxes primitives
        g.addEdge("Edge-2", "B", "C", EdgeType.DIRECTED);

        // Let's see what we have. Note the nice output from the
        // SparseMultigraph<V,E> toString() method
        System.out.println("The graph g = " + g.toString());

    }
}

“主”类:

代码语言:javascript
复制
public class Main {

    public static void main(String[] args) {

        new GraphView();
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-02 16:09:54

看起来您使用的是版本-2.1.1(或2.1),但是您自己的代码是基于旧版本的。Jung在2.1中将藏书库改为番石榴。

下面是您的代码,修改后可以使用2.1.1:(如果使用jung-2.1,我注意到有一个错误会给您提供一个NPE。只需更改为2.1.1)

代码语言:javascript
复制
import com.google.common.base.Function;
import edu.uci.ics.jung.algorithms.layout.CircleLayout;
import edu.uci.ics.jung.algorithms.layout.Layout;
import edu.uci.ics.jung.visualization.BasicVisualizationServer;
import edu.uci.ics.jung.visualization.decorators.ToStringLabeller;
import edu.uci.ics.jung.visualization.renderers.Renderer;
import javax.swing.*;
import java.awt.*;


public class GraphView {

     public GraphView() {

        GraphBuilding gb = new GraphBuilding(); // This builds the graph

        // Layout<V, E>, BasicVisualizationServer<V,E>
        Layout<String, String> layout = new CircleLayout(gb.g);

        layout.setSize(new Dimension(300, 300));
        BasicVisualizationServer<String, String> vv =
            new BasicVisualizationServer<String, String>(layout);
        vv.setPreferredSize(new Dimension(350, 350));

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

        // Set up a new stroke Transformer for the edges
        float dash[] = {10.0f};
        final Stroke edgeStroke = new BasicStroke(1.0f, BasicStroke.CAP_BUTT,
            BasicStroke.JOIN_MITER, 10.0f, dash, 0.0f);
        Function<String, Stroke> edgeStrokeTransformer =
            new Function<String, Stroke>() {
                public Stroke apply(String s) {
                    return edgeStroke;
                }
            };

        vv.getRenderContext().setVertexFillPaintTransformer(vertexPaint);
        vv.getRenderContext().setEdgeStrokeTransformer(edgeStrokeTransformer);
        vv.getRenderContext().setVertexLabelTransformer(new ToStringLabeller());
        vv.getRenderContext().setEdgeLabelTransformer(new ToStringLabeller());
        vv.getRenderer().getVertexLabelRenderer()
             .setPosition(Renderer.VertexLabel.Position.CNTR);

        JFrame frame = new JFrame("Custom Graph View");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(vv);
        frame.pack();
        frame.setVisible(true);
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53580440

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档