Bonjour,
Je viens de débuter avec jgraph. Pour mes premiers essais, j'ai récupéré une classe exemple "HelloWord". Je l'ai modifiée en rajoutant un nouveau noeud et un nouveau lien. Mais le problème est que le lien se positionne à la même place que celui qui existait. Voici le code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
 
import java.awt.Color;
import java.awt.geom.Rectangle2D;
 
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
 
import org.jgraph.JGraph;
import org.jgraph.graph.DefaultEdge;
import org.jgraph.graph.DefaultGraphCell;
import org.jgraph.graph.DefaultGraphModel;
import org.jgraph.graph.DefaultPort;
import org.jgraph.graph.GraphConstants;
import org.jgraph.graph.GraphModel;
 
public class HelloWorld {
public static void main(String[] args) {
// Construct Model and Graph
GraphModel model = new DefaultGraphModel();
JGraph graph = new JGraph(model);
 
// Control-drag should clone selection
graph.setCloneable(false);
// Enable edit without final RETURN keystroke
 
graph.setInvokesStopCellEditing(true);
// When over a cell, jump to its default port (we only have one, anyway)
 
graph.setJumpToDefaultPort(true);
 
// Insert all three cells in one call, so we need an array to store them
DefaultGraphCell[] cells = new DefaultGraphCell[5];
 
// Create Hello Vertex
cells[0] = createVertex("Hello", 20, 20, 40, 20, Color.BLUE, false);
 
// Create World Vertex
cells[1] = createVertex("World", 20, 80, 40, 20, Color.ORANGE, true);
cells[2] = createVertex("ess", 20, 140, 40, 20, Color.RED, true);
 
// Create Edge
DefaultEdge edge1 = new DefaultEdge();
DefaultEdge edge2 = new DefaultEdge();
 
// Fetch the ports from the new vertices, and connect them with the edge
 
edge1.setSource(cells[0].getChildAt(0));
edge1.setTarget(cells[1].getChildAt(0));
 
edge2.setSource(cells[0].getChildAt(0));
edge2.setTarget(cells[2].getChildAt(0));
 
cells[3] = edge1;
cells[4] = edge2;
 
// Set Arrow Style for edge
int arrow = GraphConstants.ARROW_CLASSIC;
GraphConstants.setLineEnd(edge1.getAttributes(), arrow);
GraphConstants.setEndFill(edge1.getAttributes(), true);
 
GraphConstants.setLineEnd(edge2.getAttributes(), arrow);
GraphConstants.setEndFill(edge2.getAttributes(), true);
 
// Insert the cells via the cache, so they get selected
graph.getGraphLayoutCache().insert(cells);
 
// Show in Frame
JFrame frame = new JFrame();
frame.getContentPane().add(new JScrollPane(graph));
//frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
 
public static DefaultGraphCell createVertex(String name, double x,
double y, double w, double h, Color bg, boolean raised) {
 
// Create vertex with the given name
DefaultGraphCell cell = new DefaultGraphCell(name);
 
// Set bounds
GraphConstants.setBounds(cell.getAttributes(), new Rectangle2D.Double(x, y, w, h));
 
// Set fill color
if (bg != null) {
GraphConstants.setGradientColor(cell.getAttributes(), Color.orange);
GraphConstants.setOpaque(cell.getAttributes(), true);
}
 
// Set raised border
if (raised)
GraphConstants.setBorder(cell.getAttributes(), BorderFactory.createRaisedBevelBorder());
else
// Set black border
GraphConstants.setBorderColor(cell.getAttributes(), Color.black);
// Add a Port
DefaultPort port = new DefaultPort();
cell.add(port);
port.setParent(cell);
 
return cell;
}
}
Moi je ne voudrais pas que les liens se superposent. Pour cela, j'ai vu ce bout de code sur le tuto ( ftp://ftp-developpez.com/mbaron/javase/javavisu.pdf ) , mais je ne vois pas bien comment l'utiliser pour résoudre mon problème.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
 
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
 
import org.jgraph.graph.CellView;
import org.jgraph.graph.DefaultGraphCell;
import org.jgraph.graph.EdgeView;
import org.jgraph.graph.PortView;
 
public class MyPortView extends PortView {
 
	public Point2D getLocation(EdgeView edge, Point2D nearest) {
		CellView vertex = getParentView();
		Point2D pos = null;
		if (vertex != null) {
		Rectangle2D r = vertex.getBounds();
		double highOrLow = 0;
		if (((DefaultGraphCell)vertex.getCell()).getChildAt(0) == cell) {
		highOrLow = r.getMinY();
		} else {
		highOrLow = r.getMaxY();
		}
		if (r != null)
		return new Point2D.Double(r.getCenterX(), highOrLow);
		}
		return pos;
		}
 
}
Si quelqu'un peut m'indiquer comment m'y prendre ou poster un code qui fait la même chose que ce que je souhaite(c'est à dire éviter la superposition des liens), ca m'aiderait fort bien.

En vous remerciant par avance.