java - 荣格 :How to add different color edge in the same graph

标签 java swing jung2

我正在使用 Jung2 开发一个应用程序,它将显示两点之间的连接类型,有两种不同类型的连接可用。我想用不同的颜色显示每种类型的连接。为此我想添加两个不同的从 A 到 B 的两个顶点之间的彩色边将为黑色,B 到 A 将为绿色。任何人都可以帮我举个例子......

enter image description here

最佳答案

您必须定义一个 Transformer 来接收边并返回一个 Paint - 在这种情况下,Paint 可以简单地是一个 颜色。此 Transformer 必须分配给 RenderContext 作为

  • ArrowFillPaintTransformer
  • ArrowDrawPaintTransformer
  • EdgeDrawPaintTransformer

边缘是否必须涂成绿色或黑色的决定是基于本例中的顶点(声明 if (s.equals("v1") && d.equals("v0"))表示从"v1""v0"的边。

import java.awt.Color;
import java.awt.Paint;

import javax.swing.JFrame;

import org.apache.commons.collections15.Transformer;

import edu.uci.ics.jung.algorithms.layout.FRLayout;
import edu.uci.ics.jung.graph.DirectedSparseGraph;
import edu.uci.ics.jung.graph.Graph;
import edu.uci.ics.jung.visualization.VisualizationViewer;

public class JUNGEdgeColorsTest 
{

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

        Transformer<String, Paint> colorTransformer = new Transformer<String, Paint>()
        {
            @Override
            public Paint transform(String e)
            {
                final String s = g.getSource(e);
                final String d = g.getDest(e);
                if (s.equals("v1") && d.equals("v0"))
                {
                    return Color.GREEN;
                }
                return Color.BLACK;
            }
        };
        vv.getRenderContext().setArrowFillPaintTransformer(colorTransformer);
        vv.getRenderContext().setArrowDrawPaintTransformer(colorTransformer);
        vv.getRenderContext().setEdgeDrawPaintTransformer(colorTransformer);
        jf.getContentPane().add(vv);
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jf.pack();
        jf.setVisible(true);
    }
    public static Graph<String, String> getGraph() 
    {
        Graph<String, String> g = new DirectedSparseGraph<String, String>();
        g.addVertex("v0");
        g.addVertex("v1");
        g.addEdge("e0", "v0", "v1");
        g.addEdge("e1", "v1", "v0");
        return g;
    }
}

关于java - 荣格 :How to add different color edge in the same graph,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22664334/

相关文章:

java - 多个if条件,如何优化

JavaFX Swing 浏览器非常慢

java - 将字符串转换为二叉树

java - 在荣格中克隆图表的最佳方法是什么?

java - Android - 释放位图内存

java - 如何在后台运行程序

java - 需要新依赖项时的对象引用或标识符决策

java - Frame.getContentPane().add();工作不正常?

java - 将JTable内容保存到文本文件并读取

java - 如何在java中暂停预先实现的Runnable类?