0

有向エッジを持つネットワークがあります。矢印は、GUI のエッジの方向を示します。しかし、図に示すように、矢印がエッジの端にあると、かなり混乱します。矢印の位置を中央または端の他の位置に変更することは可能ですか?ここに画像の説明を入力

編集:

AffineTransform getArrowTransform(RenderContext<V,E> rc, Shape edgeShape, Shape vertexShape)

このメソッドを使用して定義された位置に矢印を設定できることがわかりましたが、このメソッドの使用方法に関する例はまだ見つかりませんでした。リンク

4

1 に答える 1

1

のから取得したCenterEdgeArrowRenderingSupportにを割り当てることができます。必ずしもエッジの正確な中心に当たるとは限りません (コードをざっと見てみると、エッジがまっすぐの場合は完全に失敗する可能性がありますが、これは検証する必要があります)。Renderer.EdgeRendererVisualizationViewer

いずれにせよ、ここに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;
    }
}
于 2014-10-28T16:19:31.047 に答える