Ich brauche eine Organigramm-Struktur und ich möchte in der Lage sein, die Knoten auf jeder Ebene zu reduzieren und zu erweitern. Ich bin neu in JGraphX, aber nach dem, was ich gelesen habe, klingt es nach der Art, wie man Faltung implementiert, indem man die Scheitelpunkte gruppiert. Das Problem ist, wenn ich die Gruppe erstelle, setzt sie alle Kindknoten in den Elternknoten.So erstellen Sie eine hierarchische Struktur mit reduzierbaren Knoten in JGraphX
Hier ist ein Beispiel-Code, der eine große Layout gibt aber unterstützen Faltung nicht:
package com.mxgraph.examples.swing;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JFrame;
import javax.swing.SwingConstants;
import com.mxgraph.layout.mxCompactTreeLayout;
import com.mxgraph.layout.hierarchical.mxHierarchicalLayout;
import com.mxgraph.model.mxGeometry;
import com.mxgraph.swing.mxGraphComponent;
import com.mxgraph.util.mxConstants;
import com.mxgraph.util.mxPoint;
import com.mxgraph.util.mxRectangle;
import com.mxgraph.view.mxGraph;
import com.mxgraph.layout.hierarchical.mxHierarchicalLayout;
public class HelloWorld extends JFrame
{
/**
*
*/
private static final long serialVersionUID = -2707712944901661771L;
public HelloWorld()
{
super("Hello, puppies!");
mxGraph graph = new mxGraph();
Object parent = graph.getDefaultParent();
graph.getModel().beginUpdate();
try
{
//Notice that the parent is the default parent...
//The hierarchical structure looks great but I cannot collapse/expand the tree.
Object vDogsRoot = graph.insertVertex(parent, null, "DOG", 0, 0, 80, 30);
Object v2 = graph.insertVertex(parent, null, "Shar Pei", 0, 0, 80, 30);
Object v3 = graph.insertVertex(parent, null, "Pug", 0, 0, 80, 30);
Object v4 = graph.insertVertex(parent, null, "Cocker Spaniel", 0, 0, 80, 30);
Object v5 = graph.insertVertex(parent, null, "Pit Bull", 0, 0, 80, 30);
Object v6 = graph.insertVertex(parent, null, "Chihuahua", 0, 0, 80, 30);
graph.insertEdge(parent, null, "", vDogsRoot, v2);
graph.insertEdge(parent, null, "", vDogsRoot, v3);
graph.insertEdge(parent, null, "", vDogsRoot, v4);
graph.insertEdge(parent, null, "", vDogsRoot, v5);
graph.insertEdge(parent, null, "", vDogsRoot, v6);
mxHierarchicalLayout layout = new mxHierarchicalLayout(graph);
layout.setUseBoundingBox(false);
layout.execute(parent);
}
finally
{
graph.getModel().endUpdate();
}
mxGraphComponent graphComponent = new mxGraphComponent(graph);
getContentPane().add(graphComponent);
}
public static void main(String[] args)
{
HelloWorld frame = new HelloWorld();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 320);
frame.setVisible(true);
}
}
Produziert:
Guter Start, aber kein Zusammenbruch Taste. Der folgende Code zeigt das Problem, das ich habe. Um die Faltung zu unterstützen, versuche ich, eine Gruppe zu erstellen, indem ich das Elternelement der Scheitelpunkte vom Standard-Elternelement in das vDogVertex-Objekt, das die Wurzel des Baums ist, ändere. Dies wird zusammenklappbar, jedoch befinden sich alle untergeordneten Vertices innerhalb von vDogVertex und dies ruiniert das Baumlayout.
package com.mxgraph.examples.swing;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JFrame;
import javax.swing.SwingConstants;
import com.mxgraph.layout.mxCompactTreeLayout;
import com.mxgraph.layout.hierarchical.mxHierarchicalLayout;
import com.mxgraph.model.mxGeometry;
import com.mxgraph.swing.mxGraphComponent;
import com.mxgraph.util.mxConstants;
import com.mxgraph.util.mxPoint;
import com.mxgraph.util.mxRectangle;
import com.mxgraph.view.mxGraph;
import com.mxgraph.layout.hierarchical.mxHierarchicalLayout;
public class HelloWorld extends JFrame
{
/**
*
*/
private static final long serialVersionUID = -2707712944901661771L;
public HelloWorld()
{
super("Hello, puppies!");
mxGraph graph = new mxGraph();
Object parent = graph.getDefaultParent();
graph.getModel().beginUpdate();
try
{
//Notice this time the parent is the vDogsRoot vertex.
//This creates a cell group if I understand correctly.
Object vDogsRoot = graph.insertVertex(parent, null, "DOG", 0, 0, 80, 30, "");
Object v2 = graph.insertVertex(vDogsRoot, null, "Shar Pei", 0, 0, 80, 30, "");
Object v3 = graph.insertVertex(vDogsRoot, null, "Pug", 0, 0, 80, 30, "");
Object v4 = graph.insertVertex(vDogsRoot, null, "Cocker Spaniel", 0, 0, 80, 30, "");
Object v5 = graph.insertVertex(vDogsRoot, null, "Pit Bull", 0, 0, 80, 30, "");
Object v6 = graph.insertVertex(vDogsRoot, null, "Chihuahua", 0, 0, 80, 30, "");
graph.insertEdge(parent, null, "", vDogsRoot, v2);
graph.insertEdge(parent, null, "", vDogsRoot, v3);
graph.insertEdge(parent, null, "", vDogsRoot, v4);
graph.insertEdge(parent, null, "", vDogsRoot, v5);
graph.insertEdge(parent, null, "", vDogsRoot, v6);
mxHierarchicalLayout layout = new mxHierarchicalLayout(graph);
layout.setUseBoundingBox(false);
layout.execute(vDogsRoot); //apply the layout to the root group node.
layout.execute(parent);
}
finally
{
graph.getModel().endUpdate();
}
mxGraphComponent graphComponent = new mxGraphComponent(graph);
getContentPane().add(graphComponent);
}
public static void main(String[] args)
{
HelloWorld frame = new HelloWorld();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 320);
frame.setVisible(true);
}
}
Produziert: (man beachte den Zusammenbruch Taste)
Wie verhindere ich die Eckpunkte aus dem Inneren der Mutterzelle der Zellgruppe zu sein? Ich möchte, dass die Baumhierarchie beibehalten wird, aber zusammenklappbar ist. Gehe ich mit Zellgruppen auf den richtigen Pfad? Was mache ich falsch?
Ich vermute, ich muss nur die Eltern der Zellgruppe (vDogsRoot) sagen, um Zellen zu erlauben, außerhalb seiner Grenze gezeichnet zu werden, aber ich sehe noch keinen Weg, dies zu tun. Oder vielleicht gehe ich völlig falsch vor. Dies zu denken, sollte eine triviale Sache sein, um zu erreichen, aber ich habe viele verschiedene Dinge ausprobiert und viele Dokumente gegoogelt/gelesen und noch keinen Erfolg.
UPDATE 1:
Gruppen sind nicht das, was ich hier zu benötigen. Ich muss nur den gerichteten Baum durchqueren und die Knoten unter dem ausgewählten Knoten anzeigen lassen. Ein Beispiel für ein Java-Skript namens tree.html im Ordner mxGraph examples gefunden. Sie müssen dieses Beispiel nur von JavaScript in Java konvertieren.