簡體   English   中英

如何在自定義JUNG布局中初始化頂點位置?

[英]How do I initialize vertex locations in a custom JUNG layout?

如何使用事先已知的頂點位置初始化新布局?

我創建了一個自定義的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?

    }

}

那就是初始化器( 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM