繁体   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