Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JUNG(Java图形):如何防止顶点和边标签重叠?_Java_Graph_Label - Fatal编程技术网

JUNG(Java图形):如何防止顶点和边标签重叠?

JUNG(Java图形):如何防止顶点和边标签重叠?,java,graph,label,Java,Graph,Label,我现在用它来画图表(我真的是指图表而不是图表!)。问题是顶点和边标签与顶点和边重叠。这导致了奇怪的图形。这个问题并不局限于特定的布局算法(尽管我一直在使用FRLayout) 有没有可能告诉JUNG防止这些重叠?我希望这已经实施,唯一的问题是找到正确的选择 我认为这就是它的实现方式,代码的作者可能并不认为这是一个问题。JUNG库是开源的,所以欢迎您对其进行适当的更改 如果您不想更改代码,一个使标签更具可读性的简单修复方法是简单地更改标签的颜色,使其与边缘不同 (以下答案假设为Jung2;我不熟悉p

我现在用它来画图表(我真的是指图表而不是图表!)。问题是顶点和边标签与顶点和边重叠。这导致了奇怪的图形。这个问题并不局限于特定的布局算法(尽管我一直在使用FRLayout)


有没有可能告诉JUNG防止这些重叠?我希望这已经实施,唯一的问题是找到正确的选择

我认为这就是它的实现方式,代码的作者可能并不认为这是一个问题。JUNG库是开源的,所以欢迎您对其进行适当的更改

如果您不想更改代码,一个使标签更具可读性的简单修复方法是简单地更改标签的颜色,使其与边缘不同

(以下答案假设为Jung2;我不熟悉pre-Jung2)

Jung的优势之一是它非常可扩展,并且易于扩展。Jung允许您插入各种转换器(简单渲染属性)、渲染器(更复杂的渲染)等等,以便在默认设置不正确时自定义行为。它们通常安装在RenderContext上(可以从VisualizationViewer获得)

另一方面,它的缺点是它的复杂性和缺乏像样的文档。如果你要做任何中度到重度的定制,你需要深入挖掘Jung的源代码

例如,可以通过插入新的顶点标签渲染器(renderer.VertexLabel接口)自定义顶点标签渲染。例如,可以实例化BasicVertexLabelRenderer并指定不同的位置(北、西、中心等)。如果您愿意将形状更改为比该圆更大的形状,可以将标签放在中心(为此,请安装您自己的“顶点形状变换器”(vertex shape transformer)——transformer的一个实例)。或者,您可以创建此接口的自定义实现,该接口在标签文本下呈现背景


您还可以安装自己的Renderer.EdgeLabel(请参阅Jung的BasicEdgeLabelRenderer)调整版本,以自定义边缘标签的位置。

顺便说一句,如果您确实想更改颜色,一开始它似乎是一个很大的难题。但我最近发现了这个小把戏:

Transformer labelTransformer = new ChainedTransformer<String,String>(new Transformer[]{
            new ToStringLabeller<String>(),
            new Transformer<String,String>() {
            public String transform(String input) {
                return "<html><font color=\"yellow\">"+input;
            }}});

context.setVertexLabelTransformer(labelTransformer);
变压器标签变压器=新链式变压器(新变压器[]{
新的ToStringLabeller(),
新变压器(){
公共字符串转换(字符串输入){
返回“”+输入;
}}});
上下文。setVertexLabelTransformer(labelTransformer);

您只需设置标签偏移:

vv.getRenderContext().setLabelOffset(20);

其中vv是您的VisualizationViewer对象。

我遇到了相同的边缘标签重叠问题。我用来定位边缘标签的一个快速而肮脏的解决方案是在字符串值中填充一定长度的空格

//pad some white spaces to value of edge when adding edges to the graph
graph.addEdge(String.format("%-35s", "Edge-A"), 1, 2);

这将避免边缘标签在中心出现云状和重叠,尤其是在构建二部图时。希望这对你们中的一些人有所帮助

你知道在JUNG中HTML的使用记录在哪里吗。换句话说,在JUNG中使用HTML的可能性和局限性是什么?