2011-02-27 79 views
1

我需要以特定方式排列節點。我嘗試過使用靜態佈局。我可以更改節點的位置,但無法將邊緣放置在特定位置。靜態佈局有一個setLocation方法,我用它來改變節點的位置,但對於邊緣,我不知道如何將它們放置在特定的位置,以便新定位的節點與邊相連。更改Jung中邊緣的形狀和位置

另一個問題:如何通過重寫變換方法來更改Jung中邊緣的形狀。

回答

1

JUNG目前無法爲邊緣擺放提供良好的支持。 EdgeShape,特別是EdgeShape.Orthogonal,會告訴你什麼是內置的支持存在。

1

我知道這個線程有點舊,但我認爲它需要恢復 - 希望這個問題還沒有得到回答。原因是O'Madadhains先生的回答無法幫助我。 (也許是因爲我的赤字和理解文檔的意願) 經過對JUNG技術的一些研究後,我很樂意獲得一些合格的評論。

有兩種(似乎是)在靜態佈局中轉換邊緣的簡單方法。

第一種方式是覆蓋變壓器的「改造」方法直接影響端部形狀:

Transformer<Graph<Context<String, String>, String>, Shape> edgeTransformer = new Transformer<Graph<Context<String,String>,String>,Shape>(){ 
     @Override 
     public Shape transform(Graph<Context<String, String>, String> graphStringContext) 
     { 
      return (new Line2D.Double()); 
     } 
    }; 

(如果使用了「圖形」圖表)

關於感邊緣確實有 - 要連接 - 一個簡單的例子就是將一個單獨的Line2D(它將由受影響的頂點所具有的中心點組成)返回給渲染器。 明顯的方法是:

vv.getRenderContext().setEdgeShapeTransformer(edgeTransform); 

但是:這是行不通的。 (也許是因爲我做錯了;缺乏教程藉口) 無論試圖讓「transform」方法返回,渲染器都會得到空值。

第二種可能性是將頂點變換分成兩個變換器。第一個變壓器將通過使用以下設置僅基本頂點位置:

Transformer<String, Point2D> vertexPositionTransformer = new Transformer<String,Point2D>() { 
      @Override 
      public Point2D transform(String st) { 
       return new Point2D.Double(); 
      }; 

第二個是可選的。它可能被用來改變頂點的大小或任何想要的形狀。將需要位置變換的頂點的位置,因爲這個變換器將覆蓋位置集合。

Transformer<String, Shape> vertexShapeTransformer = new Transformer<String, Shape>() { 
      @Override 
      public Shape transform(String st) { 
       return new Ellipse2D.Double(); 
      }; 

現在佈局可以被實例化。它不會被構造成Graph作爲單個參數的默認方式,而是另外一個:vertexPositionTransformer。這看起來像:

StaticLayout<String, String> layout = new StaticLayout<String, String>(graph, vertexPositionTransformer); 

變換佈局結構上的邊將自動將邊緣端點設置爲每個包含的頂點的中心。

在代碼示例中,我放棄了「變換」方法的內容,這當然會因目的而有所不同。使用「Transformer」類/對象必須在將圖形頂點和邊添加到它們的影響之後完成。而已。 請糾正不良風格等問題。 我很高興得到反饋。

問候

盧卡斯Koschine

+1

這是不是一個真正的答案,原來的問題,所以將其作爲一個答案是不是真的合適。關於你的擔憂:我建議你從樣本代碼開始,如果你還沒有的話。 – 2012-09-27 04:43:01

+1

沒有涉及靜態邊緣放置的示例! 問題是如何定位指向靜態節點的邊。我回答了這個問題,還是我錯了? – 2012-09-27 09:07:44