如何初始化一个自定义布局JUNG顶点位置?(How do I initialize vertex l

2019-09-23 00:33发布

如何初始化事先知道的顶点位置新的布局?

我创建了一个自定义的JUNG布局类:

public class CustomLayout extends AbstractLayout {

    AbstractLayout subLayout = null;

    final int WIDTH = 500;
    final int HEIGHT = 500;

    public CustomLayout(Graph<Vertex, Edge> graph, Transformer<Vertex, Point2D> init) {
        super(graph, init);

        for (Vertex v : this.getGraph().getVertices()) {
            // Assign each vertex a random initial position.
            setLocation(v, new Point2D.Double(random * WIDTH, random * HEIGHT);
        }

        subLayout = new FRLayout(this.getGraph(), ...?, null);
        // How do I pass each vertices prior positions?

    }

}

Answer 1:

这就是初始化( Transformer<V,Point2D>是。 该变压器应返回你进入它的任何顶点的初始位置。 我看到FRLayout不接受其构造方法的初始化,但看起来你可以调用setInitializer()

响应于你的问题, Transformer是一个通用接口,给定的输入时,产生相应的输出。 实现可以是你想要的。 它可以成为一个组静态定义的位置,或者实时计算位置。 这给你一个很大的灵活性。

你可能会注意到,接口承载路过的相似Map<K,V>并在其实是一个很简单的包装实现可以进行如下:

  public class MapTransformer<K,V> implements Transformer<K,V> {

    private final Map<K,V> map;

    public MapTransformer(Map<K,V> map) {
      this.map = map;
    }

    public V transform(K key) {
      return map.get(key);
    }

  }

所以,你可以把你的位置在地图上,然后包裹在上面的地图MapTransformer



文章来源: How do I initialize vertex locations in a custom JUNG layout?
标签: java jung