首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在JUNG中添加具有相同标签(但不同端点)的两个边?

如何在JUNG中添加具有相同标签(但不同端点)的两个边?
EN

Stack Overflow用户
提问于 2012-02-19 19:38:24
回答 3查看 2.2K关注 0票数 3

如何添加两个边具有相同的标签,但不同的端点?

例如,我想添加两个具有相同标签'label1‘的边,一个从顶点v-1到顶点v-2,另一个从顶点v-2到v-3。

守则的一部分是:

代码语言:javascript
复制
g.addEdge("label1","v-1","v-2");
g.addEdge("label1","v-2","v-3");

但是JUNG不允许添加带有相同标签的两条边。它给出了一个错误:

边label1已经存在于此图中,其端点为v-1,v-2,不能与端点v-2,v-3相加。

如何添加具有相同标签的两条边?

谢谢。

编辑:

我刚刚读到,有一种方法可以将权重值赋给边缘,即使用EdgeWeightLabeller,但是这些权重值应该是整数。因此,这似乎没有解决问题。

EN

回答 3

Stack Overflow用户

发布于 2012-02-19 23:47:22

标签不需要是边缘的toString();这只是默认的。看看PluggableRendererContext,看看如何提供为图中的每个元素提供属性的转换器。

我还会查看JUNG 2手册(关于wiki)中有关用户数据的部分:http://sourceforge.net/apps/trac/jung/wiki/JUNGManual#UserData

票数 1
EN

Stack Overflow用户

发布于 2013-05-30 20:22:58

当我遇到这个问题时,我会生成标签字符串(您已经是一个字符串),并将其值设置为:"ID_OF_FIRST_VERTEX:ID_OF_SECOND_VERTEX:EDGE_VALUE".然后,为了只显示一个值,我确实使用了转换。很简单,它只是从edge的名字取edge_value。

在这个示例中,我使用分隔符":“。

代码语言:javascript
复制
VisualizationViewer vv = new VisualizationViewer(layout, dim);
//other operations
vv.getRenderContext().setEdgeLabelTransformer(new Transformer<String, String>() {
    @Override
    public String transform(String c) {
        return StringUtils.substringAfterLast(c, ":");
    }
});

当然,您不必使用Apache的StringUtils,普通的String.subString也可以在这里工作。

希望能帮上忙。

票数 1
EN

Stack Overflow用户

发布于 2014-10-30 13:42:05

下面是一个MCVE示例。

代码语言:javascript
复制
package stackoverflow;

import javax.swing.JFrame;
import org.apache.commons.collections15.Transformer;
import edu.uci.ics.jung.algorithms.layout.FRLayout;
import edu.uci.ics.jung.graph.DirectedSparseMultigraph;
import edu.uci.ics.jung.graph.Graph;
import edu.uci.ics.jung.visualization.VisualizationViewer;


public class JungNetwork {

public static Graph<String, String> getGraph() 
{
    Graph<String, String> g = new DirectedSparseMultigraph<String, String>();

    g.addVertex("v1");
    g.addVertex("v2");
    g.addVertex("v3");
    g.addEdge("label1", "v1", "v2");
    g.addEdge("label2", "v2", "v3");
    g.addEdge("label3", "v3", "v1");
    return g;
}


public static void main(String[] args) 
{
    JFrame f = new JFrame();
    final Graph<String, String> g = getGraph();
    VisualizationViewer<String, String> vv =    new VisualizationViewer<String, String>(new FRLayout<String, String>(g));

    final Transformer <String, String> edgeLabel = new Transformer<String, String>(){

        @Override
        public String transform(String edge) {
            // TODO Auto-generated method stub
            if (edge.equals("label1")|| edge.equals("label2")){
                return "label1";
            }else
            return "label3";
        }

    };


    vv.getRenderContext().setLabelOffset(15);
    vv.getRenderContext().setEdgeLabelTransformer(edgeLabel);

    f.getContentPane().add(vv);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.pack();
    f.setVisible(true);
}


}

结果:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9352531

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档