Bonjour,
J'ai un problème pour déplacer mes vertexes de mon graphe à la sourit; elles sont sont trop lentes à déplacer, comme si mon pc ramait pour pouvoir les déplacer,
D'où cela peut-il venir ?
Merci d'avance.
Version imprimable
Bonjour,
J'ai un problème pour déplacer mes vertexes de mon graphe à la sourit; elles sont sont trop lentes à déplacer, comme si mon pc ramait pour pouvoir les déplacer,
D'où cela peut-il venir ?
Merci d'avance.
Tu utilises une API spécifique ? Du code à toi ?
Il nous faut plus d'info. Un simple "ça marche pas" ne fait jamais avancer les chose :roll:
Je vous montre mes classe :
Voilà la classe qui fait apparaitre le graphe, en fait c'est une méthode
et voilà une classe héritant de vertex view que j'ai écrite moi mêmeCode:
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 public void Graphique(){ int nbrind ; int colo=0; int compteur=0; Instances echant ; ArrayList facti = new ArrayList(); ArrayList facti2 = new ArrayList(); build bui = new build(); facti = bui.factichek; facti2= bui.vraiefacti; nomsommets = new String [facti.size()]; for (int u=0;u<facti.size();u++){ nomsommets[u]= (String) facti.get(u); } matriceincidence mat = new matriceincidence(); mat = bui.automatecéllulaire; nbrind = m_Instances.numInstances(); label = new JLabel[mon.numValues()]; barede = new JProgressBar [mon.numValues()]; for (int i=0;i<label.length;i++){ label[i]= new JLabel(); barede[i]= new JProgressBar(); } for (int u=0;u<label.length;u++){ label[u].setText(mon.value(u)); } int jj= 0; GraphModel model = new DefaultGraphModel(); GraphLayoutCache view = new GraphLayoutCache(model, new MyCellViewFactory()); JGraph graph = new JGraph(model, view); DefaultGraphCell[] cells = new DefaultGraphCell[facti.size()]; for (int i=0;i<facti.size();i=i+2){ cells[i]= new DefaultGraphCell(); if (i==0){ for (int ii=0;ii<label.length;ii++){ label[ii].setText(String.valueOf(splitData(m_Instances ,mon)[ii].numInstances())); } GraphConstants.setBounds(cells[i].getAttributes(), new Rectangle2D.Double(20+i*15,20+i*10,135,65)); GraphConstants.setGradientColor( cells[i].getAttributes(), Color.orange); GraphConstants.setOpaque(cells[i].getAttributes(), true); DefaultPort port0 = new DefaultPort(); cells[i].add(port0); }else{ for (int ii=0;ii<label.length;ii++){ for(int kj=0;kj<m_Instances.numInstances();kj++){ //compteur = barede[i].getValue(); } } GraphConstants.setBounds(cells[i].getAttributes(), new Rectangle2D.Double(20+i*15,20+i*10,135,65)); GraphConstants.setGradientColor( cells[i].getAttributes(), Color.orange); GraphConstants.setOpaque(cells[i].getAttributes(), true); DefaultPort port0 = new DefaultPort(); cells[i].add(port0); } } do{ for (int j=0;j<mat.donnernbrcolonnes(mat);j++){ if (mat.donnervaleurentrée(mat,jj,j)==true){ for(int k=0;k<mat.donnernbrlignes(mat);k++){ if (mat.donnervaleursortie(mat,k,j)==true){ DefaultEdge edge = new DefaultEdge(facti.get(k)); edge.setSource(cells[jj].getChildAt(0)); edge.setTarget(cells[k+1].getChildAt(0)); cells[k]= edge; int arrow = GraphConstants.ARROW_CLASSIC; GraphConstants.setLineEnd(edge.getAttributes(), arrow); GraphConstants.setEndFill(edge.getAttributes(), true); break; } } } }jj=jj+2; }while(jj<facti.size()); graph.getGraphLayoutCache().insert(cells); JFrame frame = new JFrame("L'arbre de décision"); frame.getContentPane().add(new JScrollPane(graph)); frame.pack(); frame.setVisible(true); }
Les autres classes PortView et EdgeView sont les classes par defaut de l'api.Code:
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 import java.awt.BorderLayout; import java.awt.Component; import java.awt.GridLayout; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JProgressBar; import org.jgraph.JGraph; import org.jgraph.graph.VertexView; import weka.gui.explorer.ClassifierPanel; public class MyVertexView extends VertexView { ; public MyVertexView(){ super(); } public MyVertexView (Object cell){ super(cell); } public Component getRendererComponent(JGraph graph, boolean selected, boolean focus, boolean preview){ JPanel myVertexPanel = new JPanel(); JPanel jPanel1 = new JPanel(); BorderLayout borderLayout2 = new BorderLayout(); GridLayout gridLayout1 = new GridLayout(); JLabel leslabels[] ; JProgressBar barprog []; String noms[]; ClassifierPanel mongraphe = new ClassifierPanel(); leslabels = mongraphe.label; barprog = mongraphe.barede; noms= mongraphe.nomsommets; JLabel gr = new JLabel(); gr.setText(""); try { myVertexPanel.setLayout(borderLayout2); jPanel1.setLayout(gridLayout1); gridLayout1.setColumns(2); gridLayout1.setRows(0); for (int ii =0;ii<leslabels.length;ii++){ jPanel1.add(leslabels[ii]); jPanel1.add(barprog[ii]); } myVertexPanel.add(jPanel1, BorderLayout.CENTER); myVertexPanel.add(gr,BorderLayout.NORTH); } catch(Exception ex) { ex.printStackTrace(); } return myVertexPanel; } }
J'aurais une autre question : si je veux faire en sorte que les vertexes de mon graphe s'affichent d'une autre façon, je voudrais que leur disposition par défaut change, est ce que je dois voire ça du coté du GraphelayoutCache ?
Encore merci
Bon,
Pour ceux qui auraient le même problème plus tard, j'ai demandé dans le forum officiel de JGraph et on m'a dit que mon renderer devait être trop lourd donc voilà, je vais essayé de l'alléger si je n'y arrive pas ça ne sera pas trop grave.
:salut: