首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >图形的自动布局(JGraphX)

图形的自动布局(JGraphX)
EN

Stack Overflow用户
提问于 2015-03-20 00:27:23
回答 1查看 5.4K关注 0票数 10

我在显示具有自动布局的JGraphX时遇到问题。

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

一个足够的结果可能如下所示(我手动移动它们):

我不需要坚持使用JGraphX。我还测试了JUNGJGraphT。但这是我到目前为止的最好成绩。我需要的是我的数据视图,与定向的eges和一些标签上。

我做了一个示例代码,展示了它是如何创建的。它类似于http://forum.jgraph.com/questions/4810/how-to-layout-nodes-automatically-using-fast-organic-layout。还有一个2012年的评论,提到了同样的问题"...However我注意到节点有时会重叠,你知道如何解决这个问题吗?我已经尝试过这些属性,它看起来相当随机。有什么建议可以改善总体外观吗?“

代码语言:javascript
复制
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();
                }

        }
}

示例生成的图表:

EN

回答 1

Stack Overflow用户

发布于 2018-04-23 03:29:01

不要使用你的morphGraph方法,试着使用下面这样的方法:

代码语言:javascript
复制
new mxHierarchicalLayout(graph).execute(graph.getDefaultParent());

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29149989

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档