Группы нарушают иерархическую компоновку в JGraphX

Я обнаружил, что если я ввожу группы в простой график с иерархической структурой, группа располагается неправильно.

Например, вот простой график:

public class HierarchicalLayoutWithGrouping extends JFrame {

    public HierarchicalLayoutWithGrouping() {
        super("Hierarchical Layout With Grouping Test");

        mxGraph graph = new mxGraph();
        Object parent = graph.getDefaultParent();

        graph.getModel().beginUpdate();
        try {
            Object transfer1 = graph.insertVertex(parent, null, "Transfer Data1.csv", 0, 0, 100, 40);
            Object transfer2 = graph.insertVertex(parent, null, "Transfer Data2.csv", 0, 0, 100, 40);
            Object load1 = graph.insertVertex(parent, null, "Load Data1.csv", 0, 0, 100, 40);
            Object load2 = graph.insertVertex(parent, null, "Load Data1.csv", 0, 0, 100, 40);
            graph.insertEdge(parent, null, null, transfer1, load1);
            graph.insertEdge(parent, null, null, transfer2, load2);
            Object calculate = graph.insertVertex(parent, null, "Calculate", 0, 0, 100, 40);
            graph.insertEdge(parent, null, null, load1, calculate);
            graph.insertEdge(parent, null, null, load2, calculate);

            // Object loads = graph.insertVertex(parent, null, "Loads", 0, 0, 200, 400, "shape=swimlane;");
            // graph.groupCells(loads, 5, new Object[] { load1, load2 });

            mxHierarchicalLayout layout = new mxHierarchicalLayout(graph, SwingConstants.WEST);
            layout.execute(parent);

        } finally {
            graph.getModel().endUpdate();
        }

        mxGraphComponent graphComponent = new mxGraphComponent(graph);
        getContentPane().add(graphComponent);
    }

    public static void main(String[] args) {
        HierarchicalLayoutWithGrouping frame = new HierarchicalLayoutWithGrouping();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(600, 450);
        frame.setVisible(true);
    }
}

Выдает этот красивый график:

введите здесь описание изображения

но если я раскомментирую следующие строки:

            Object loads = graph.insertVertex(parent, null, "Loads", 0, 0, 200, 400, "shape=swimlane;");
            graph.groupCells(loads, 5, new Object[] { load1, load2 });

Я получаю это:

введите здесь описание изображения

Я пробовал разные варианты на mxHierarchicalLayout, но пока не нашел ничего подходящего. Как мне заставить его расположить группу в правильном положении?

Спасибо.


person Ian Jones    schedule 03.09.2013    source источник


Ответы (1)


Я обнаружил, что поле группировки получает другую иерархию, поскольку узлы не сгруппированы. По этой причине каждый из групповых полей перемещается в новую строку. Я думаю, что нет другой возможности, кроме написания собственного алгоритма макета или просто переопределения метода, который генерирует атрибуты иерархии во время выполнения макета.

person jsp    schedule 19.09.2013