2013-12-26 4 views
2

Мне нужно иметь функцию expand/collapse с моим mxGraph.JGraphX ​​- развернуть/свернуть ячейку/вершину

Сценарий похож на то, что есть три вершины: v1, v2 и v3. v2 и v3 связаны с v1. Теперь в вершине v1 есть маленькая иконка, и когда пользователь нажимает на значок, вершины v2 и v3 должны быть скрыты внутри v1, а когда пользователь нажимает на значок, вершины v2 и v3 должны быть видны. Это подобно расширению и коллапсу вершины v1.

Я пробовал использовать graph.foldCells() и graph.groupCells(). Но ничего не работает. ниже мой код.

import java.awt.BorderLayout; 
import java.awt.Dimension; 

import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.SwingConstants; 

import com.mxgraph.layout.hierarchical.mxHierarchicalLayout; 
import com.mxgraph.swing.mxGraphComponent; 
import com.mxgraph.view.mxGraph; 

public class MxGraphSample { 

    public static void creategraph() { 

     final JFrame frame = new JFrame(); 
     frame.setMaximumSize(new Dimension(800, 1200)); 
     JPanel panel = new JPanel(); 
     panel.setSize(frame.getMaximumSize().width, 
       frame.getMaximumSize().height); 

     final mxGraph graph = new mxGraph(); 
     Object parent = graph.getDefaultParent(); 
     graph.getModel().beginUpdate(); 

     try { 
      Object v1 = graph.insertVertex(parent, null, "v1", 20, 20, 80, 30); 
      Object v2 = graph.insertVertex(parent, null, "v2", 120, 70, 80, 30); 
      Object v3 = graph.insertVertex(parent, null, "v3", 220, 70, 80, 30, 
        "fillColor=lightgreen"); 

      graph.insertEdge(parent, null, "", v1, v2); 
      graph.insertEdge(parent, null, "", v1, v3, "strokeColor=lightgreen"); 

      graph.foldCells(true); 
      graph.cellsFolded(new Object[] { v1, v2, v3 }, true, false); 

      mxHierarchicalLayout layout = new mxHierarchicalLayout(graph, 
        SwingConstants.WEST); 
      layout.setInterRankCellSpacing(70); 
      layout.execute(graph.getDefaultParent()); 

     } finally { 
      graph.getModel().endUpdate(); 
     } 
     final mxGraphComponent graphComponent = new mxGraphComponent(graph); 

     panel.setLayout(new BorderLayout()); 
     panel.add(graphComponent, BorderLayout.CENTER); 

     frame.add(panel); 
     frame.pack(); 
     frame.setVisible(true); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 

    public static void main(String[] args) { 
     creategraph(); 
    } 
} 

enter image description here

Все примеры будут полезны.

+0

У вас это работало? Я ищу такое решение с помощью библиотеки JavaScript. Любая помощь для этого будет полезна. –

ответ

0

сделать родительский v2 и v3 как v1 вместо defaultParent()

   Object v2 = graph.insertVertex(v1, null, "v2", 120, 70, 80, 30); 
     Object v3 = graph.insertVertex(v1, null, "v3", 220, 70, 80, 30, 
       "fillColor=lightgreen"); 

остальное создать группу по следующей методике после объявления 3-х вершин graph.createGroupCells (новый объект [] {v1}); graph.groupCells (v1,30.5, new Object [] {v2, v3});