0

I have a JPanel to create a graph which cannot be editable.

When the graph shows, the edge name is covered by boundary of JFrame.

How can I show that edge name without being covered by JFrame?

My Example

enter image description here This is my code:

package myapp;
import java.awt.BorderLayout;
import javax.swing.JFrame;
import com.mxgraph.layout.mxIGraphLayout;
import com.mxgraph.layout.hierarchical.mxHierarchicalLayout;
import com.mxgraph.model.mxICell;
import com.mxgraph.swing.mxGraphComponent;
import com.mxgraph.view.mxGraph;

public class CreateGraph extends JFrame {

private static final long serialVersionUID = 8083868183987456695L;
mxICell a, b, c, d, e, f, g, h;

public CreateGraph() {
final mxGraph graph = new mxGraph();
Object parent = graph.getDefaultParent();

graph.getModel().beginUpdate();
try {

    a = (mxICell) graph.insertVertex(parent, null, "a", 0, 0, 80, 30);
    b = (mxICell) graph.insertVertex(parent, null, "b", 0, 0, 80, 30);
    c = (mxICell) graph.insertVertex(parent, null, "c", 0, 0, 80, 30);
    d = (mxICell) graph.insertVertex(parent, null, "d", 0, 0, 80, 30);

    graph.insertEdge(parent, null, "ab", a, b);
    graph.insertEdge(parent, null, "bc", b, c);
    graph.insertEdge(parent, null, "cd", c, b);
    graph.insertEdge(parent, null, "cd", c, d);
    graph.insertEdge(parent, null, "da", d, a);

    graph.setCellsEditable(false);   
    graph.setCellsMovable(false); 
    graph.setCellsSelectable(false);

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

// define layout
mxIGraphLayout layout = new mxHierarchicalLayout(graph);
layout.execute(graph.getDefaultParent());

mxGraphComponent graphComponent = new mxGraphComponent(graph);
getContentPane().setLayout(new BorderLayout());
getContentPane().add(graphComponent, BorderLayout.CENTER);

}

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

}
Frodo Baggins
  • 8,290
  • 6
  • 45
  • 55
Miami
  • 1
  • 1
  • (1) Format your code properly. (2) The classes in this library start with a lowercase, that's a bad sign already. (3) It looks like `mxGraphComponent` does not declare its size properly. – user1803551 Jul 04 '17 at 14:10

1 Answers1

0

Maybe don't want to use a BorderLayout, since you don't really have a use case like How to Use BorderLayout or Border Layout not working.

Your edge is at X-position 0, which just inside your layout.

One option is solving your problem withing JGraph itself, by adding a constant like private final double X_OFFSET = 10 and then add it to the X-coordinate of every graph operation.

Johannes
  • 314
  • 1
  • 11