簡體   English   中英

在Jung中更改(重命名)頂點標簽

[英]Change(rename) vertex label in jung

有沒有辦法更改頂點標簽?
例如,在我的JUNG圖形應用中,我有兩個頂點A和B,
如何僅重命名特殊的頂點標簽?

現在,我使用此方法,但它會更改所有頂點名稱。

vv.getRenderContext().setVertexLabelTransformer(new Transformer<String,String>() {
 @Override
 public String transform(String i) {
 return "test";
 }
 });

謝謝你的幫助。

這里有幾件事情要考慮。

Transformer<S, T>只是一個類的功能接口 [1],該類在給定類型S的對象的情況下返回類型T的對象。 您可以使用transform方法的行為來返回T類型的對象。

因為它是一個功能接口,所以您可以使用lambda表達式使語法更加清晰(假設您使用的是Java 8+)。

因此,將“ A”重命名為“ B”(使用Java 8 lambda)的一種簡單方法是:

vv.getRenderContext().setVertexLabelTransformer(i -> {
      return i.equals("A")
          ? "B"
          : i;  
    }

但是,這是一個糟糕的解決方案,因為它對映射進行了硬編碼,並且不允許您更改其他節點的名稱或再次更改名稱(例如,響應用戶輸入),而無需進行進一步的代碼更改。

執行此操作的更可靠的方法是讓Map<S, T>稱為labels ,您的函數可以引用該labels

vv.getRenderContext().setVertexLabelTransformer(i -> labels.get(i));

這樣,您可以隨意更新labels

您可能還需要考慮節點是否應該由String對象表示,或者它們是否應該是包含可以用作標簽的String字段的對象。 我通常會發現,將節點對象與其標簽脫鈎是一個好主意(除其他事項外,這允許標簽是非唯一的,而節點對象不能這樣)。

[1]實際上,JUNG的3.0版將只使用java.util.Function代替Transformer

暫無
暫無

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

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