[英]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.