JUNG: Как добавить грани разных цветов на один и тот же график

Я разрабатываю одно приложение, используя Jung2, которое будет показывать тип соединения между двумя точками, доступны два разных типа соединения. Я хочу показать каждый тип соединения, используя разные цвета. Для этого я хочу добавить два края разных цветов между две вершины от A до B будут черными, а от B до A - зелеными. Может ли кто-нибудь помочь мне с примером...

введите здесь описание изображения


person Anupam Maiti    schedule 26.03.2014    source источник
comment
Это не только связь между двумя точками. На самом деле я рисую сетевой график с помощью JUNG.   -  person Anupam Maiti    schedule 27.03.2014


Ответы (1)


Вы должны определить Transformer, который получает преимущество и возвращает Paint — в этом случае Paint может быть просто Color. Этот Transformer должен быть назначен RenderContext как

  • СтрелкаЗаполнитьКраскаТрансформатор
  • СтрелкаРисоватьКраскаТрансформатор
  • 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;
    }
}
person Marco13    schedule 28.03.2014