Search code examples
javagraphjgraphx

Customizing JGraphX


I have been using JGraphX to display some data (simple discrete graphs) and I would like to know how to do the following things with the JGraphX library:

  • Make all edges unmovable but still allow the user to create an edge between two vertices
  • Make all vertices and edges uneditable (they cannot edit what is displayed on them)
  • How do I get the selected vertex or edge at any given time?
  • Make all vertex boxes unresizable to the user
  • How do I modify the colour of each vertex's box?

Thanks, ExtremeCoder


Solution

  • Here is an example:

    mxGraph graph = new mxGraph()
    {
      // Make all edges unmovable
      public boolean isCellMovable(Object cell)
      {
        return !getModel().isEdge(cell);
      }
    
      // Make all vertex boxes unresizable
      public boolean isCellResizable(Object cell)
      {
         return !getModel().isVertex(cell);
      }
    };
    
    // Make all vertices and edges uneditable
    graph.setCellsEditable(false);
    
    // Make all edges unbendable
    graph.setCellsBendable(false);
    
    // Get the selected vertex or edge
    System.out.println(graph.getSelectionCell());
    
    // To insert a vertex with a given color:
    Object v1 = graph.insertVertex(parent, null, "Hello",
                20, 20, 80, 30, "fillColor=#FF0000;");
    
    // To modify the color of a vertex:
    graph.setCellStyles(mxConstants.STYLE_FILLCOLOR, "#00FF00", new Object[]{v1});