gpt4 book ai didi

java - 图的自动布局 (JGraphX)

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:01:43 24 4
gpt4 key购买 nike

我无法显示具有自动布局的 JGraphX。

我的程序(下面的代码)创建如下输出: enter image description here

足够的结果可能是这样的(我用手移动了它们): enter image description here

我不必坚持使用 JGraphX。我还测试了 JUNGJGraphT。但这是我迄今为止最好的成绩。我需要的是我的数据的 View ,上面有定向图形和一些标签。

我制作了一个示例代码来展示它是如何创建的。它类似于 http://forum.jgraph.com/questions/4810/how-to-layout-nodes-automatically-using-fast-organic-layout .2012 年有一条评论提到了同样的问题“[...]但是我注意到节点有时会重叠,你知道解决这个问题的方法吗,我玩过这些属性,它看起来很随机。有什么关于如何改善总体外观的建议吗?”

public class Test extends JFrame {

public static void main(String[] args) {
JFrame f = new JFrame();
f.setSize(800, 800);
f.setLocation(300, 200);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

final mxGraph graph = new mxGraph();

mxGraphComponent graphComponent = new mxGraphComponent(graph);
f.getContentPane().add(graphComponent, BorderLayout.CENTER);

f.setVisible(true);
Object parent = graph.getDefaultParent();

graph.getModel().beginUpdate();
try {
Object start = graph.insertVertex(parent, "start", "start", 100,
100, 80, 30);
for (int i = 0; i < 10; i++) {
Object a = graph.insertVertex(parent, "A" + i, "A" + i, 100,
100, 80, 30);
graph.insertEdge(parent, null, "E" + i, start, a);

Object b = graph.insertVertex(parent, "B" + i, "B" + i, 100,
100, 80, 30);
graph.insertEdge(parent, null, "E" + i, a, b);
start = a;
}
} finally {
graph.getModel().endUpdate();
}

morphGraph(graph, graphComponent);
}

private static void morphGraph(mxGraph graph,
mxGraphComponent graphComponent) {
// define layout
mxIGraphLayout layout = new mxFastOrganicLayout(graph);

// layout using morphing
graph.getModel().beginUpdate();
try {
layout.execute(graph.getDefaultParent());
} finally {
mxMorphing morph = new mxMorphing(graphComponent, 20, 1.5, 20);

morph.addListener(mxEvent.DONE, new mxIEventListener() {

@Override
public void invoke(Object arg0, mxEventObject arg1) {
graph.getModel().endUpdate();
// fitViewport();
}

});

morph.startAnimation();
}

}
}

从示例生成的图表:

enter image description here

最佳答案

不要使用您的 morphGraph 方法,请尝试使用如下方法:

new mxHierarchicalLayout(graph).execute(graph.getDefaultParent());

这将使用 mxGraph 中的默认布局管理器(版本 3.9.3)

关于java - 图的自动布局 (JGraphX),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29149989/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com