Java:将箭头放置在 Jung2 Network 中边缘的中心

标签 java user-interface jung jung2

我有一个具有有向边的网络。箭头指示 GUI 中边缘的方向。 但如图所示,当箭头位于边缘末端时,它就变得非常困惑。是否可以将箭头的位置更改为中心或边缘的任何其他位置? enter image description here

编辑:

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

我发现此方法可用于将箭头设置在定义的位置,但我仍然找不到任何有关如何使用此方法的示例。 Link

最佳答案

您可以将 CenterEdgeArrowRenderingSupport 分配给从 VisualizationViewerRenderer 获取的 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/

相关文章:

java - 如何过滤KNeighborhoodFilter的结果?

javascript - 使用 Ajax 将字符串数据发送到 Java

java - 仅当 SonarQube 服务器在线时才对 Jenkins 执行 SonarQube 分析

java - OkHttp 中的 setEntity 等效项 - Android

ios - 一个以 three20 包装 UI 类的方式包装 iOS 动画的库

java - 荣格图库: how to search vertices based on vertex property?

java - 获取照片的 gps 位置

python - 在 GTK 应用程序中嵌入 python 程序(C 语言)

android - 在 GridView 中多次(>120 次)调用 getView 导致的 OutOfMemoryError

java - 如何使用 JUNG 的注释系统注释我的图表?