我正在使用 Jung2 开发一个应用程序,它将显示两点之间的连接类型,有两种不同类型的连接可用。我想用不同的颜色显示每种类型的连接。为此我想添加两个不同的从 A 到 B 的两个顶点之间的彩色边将为黑色,B 到 A 将为绿色。任何人都可以帮我举个例子......
最佳答案
您必须定义一个 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/