我有一个具有有向边的网络。箭头指示 GUI 中边缘的方向。 但如图所示,当箭头位于边缘末端时,它就变得非常困惑。是否可以将箭头的位置更改为中心或边缘的任何其他位置?
编辑:
AffineTransform getArrowTransform(RenderContext<V,E> rc, Shape edgeShape, Shape vertexShape)
我发现此方法可用于将箭头设置在定义的位置,但我仍然找不到任何有关如何使用此方法的示例。 Link
最佳答案
您可以将 CenterEdgeArrowRenderingSupport
分配给从 VisualizationViewer
的 Renderer
获取的 Renderer.Edge
。它不一定会击中边缘的精确中心(从代码上看,如果边缘是直,它可能会完全失败,但这必须有待验证)。
无论如何,这是一个 MCVE :
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;
import edu.uci.ics.jung.visualization.renderers.CenterEdgeArrowRenderingSupport;
import edu.uci.ics.jung.visualization.renderers.Renderer;
public class JUNGEdgeCenterArrows
{
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));
Renderer.Edge<String, String> edgeRenderer =
vv.getRenderer().getEdgeRenderer();
edgeRenderer.setEdgeArrowRenderingSupport(
new CenterEdgeArrowRenderingSupport<String, String>());
f.getContentPane().add(vv);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.pack();
f.setVisible(true);
}
public static Graph<String, String> getGraph()
{
Graph<String, String> g =
new DirectedSparseMultigraph<String, String>();
g.addVertex("v0");
g.addVertex("v1");
g.addEdge("e0", "v0", "v1");
g.addEdge("e1", "v0", "v1");
g.addEdge("e2", "v0", "v1");
return g;
}
}
关于Java:将箭头放置在 Jung2 Network 中边缘的中心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26538771/