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