使用Jung库的顶点标签

时间:2017-05-03 08:00:57

标签: java label vertex jung

我开始使用Jung库来显示图形。目前的主要问题是我不知道如何为我的顶点设置标签/元数据。根据顶点的特定属性,我想以不同的方式为顶点着色。类Node的对象包含一个额外的Integer值,我想作为顶点的附加属性(通过getGroup())添加。以下代码仅显示每个节点的getId() - String。

任何建议?

这是我在主类中的以下代码:

android:fillViewport="true"

1 个答案:

答案 0 :(得分:0)

您没有指定您正在使用哪个版本的JUNG,但您已经有了正确的总体思路:使用将节点转换为您想要的字符串的函数调用setVertexLabelTransformer()渲染。

也就是说,您的代码存在一些问题,我不确定我是否理解您如何使用上面引用的代码获取报告的行为。

(0)我不明白为什么你要将节点ID添加为顶点,而不仅仅是Node。您的Link节点ID或Node的端点是? 在任何情况下,如果您没有添加Node,那么您的代码中并不清楚您所期望的顶点组如何可用。

(1)图的顶点是节点ID,而不是Node s,但是您将传递给transform()的顶点对象转换为Node。我希望这会抛出ClassCastException

(2)即使假设您的顶点实际上是Node个对象, 我很惊讶您报告顶点ID(而不是组)是标签上显示的内容,因为您在顶点中唯一需要的东西标签是集团;我根本不希望ID显示出来。

也就是说,如果顶点是Node个对象,并且你想要显示多个元素,那么它很容易;只需提供一个在Node对象上执行所需操作的功能 *如果该函数是toString(),那么您可以使用ToStringLabeller(这实际上应该是默认值,因此您甚至不需要指定它);更多关于以下内容。 *如果该函数是(例如)getLabel(),那么这应该有效(在Java 8中):

// either of these should work
setVertexLabelTransformer(Node::getLabel())
setVertexLabelTransformer(v -> v.getLabel())    

如果您不使用Java 8,则可以执行匿名内部类。

如果您不想希望您的顶点成为Node个对象,那么您需要提供一种将顶点对象(节点ID)映射到节点的方法,例如Map<String, Node>,然后将该地图提供给将顶点转换为标签的函数:

setVertexLabelTransformer(v -> labelToNode.get(v).getLabel())

注意:ToStringLabeller()通常不应覆盖其transform()方法;它只是指定你想使用对象本身的toString()作为标签。

// These two are equivalent
setVertexLabelTransformer(v -> v.toString())
setVertexLabelTransformer(new ToStringLabeller())

(不用说,ToStringLabeller()早于Java 8. :))