• Aucun résultat trouvé

La classe GrapheGraphique

Dans le document Visualisation de Graphes (Page 34-37)

3.3 Interface

3.3.2 El´ ´ ements Graphiques

3.3.2.3 La classe GrapheGraphique

C’est la classe principale d’affichage du graphe. Elle h´erite de la classe JPanel, qui d´ecrit un panneau. Ce panneau est modifiable et on peut donc dessiner dessus. C’est cette m´ethode que nous allons utiliser pour afficher le graphe.

3.3.2.3.1 El´ements de base

Cette classe contient deux listes, qui sont la liste de nœuds graphiques, ainsi que la liste d’arˆetes graphiques qui vont ˆetre affich´ees `a l’´ecran. La simple modification de ces listes entraine directement une modification de l’affichage du graphe.

De plus, nous avons impl´ement´e notre classe GrapheGraphique sous forme de machine `a ´etats, grˆace au design pattern state. C’est-`a-dire que l’´etat courant du graphe graphique va correspondre

`

a une de ses modifications. Pour cela nous avons d´efini une classe abstraite EtatGraphe qui doit impl´ementer les ´ecouteurs d’´ev´enements souris qui sont MouseListener et MouseMotionListener, qui

´ecoutent respectivement les clics de souris et les mouvements de souris. Pour le moment toutes les m´ethodes issues des ´ecouteurs d’´ev´enements sont vides dans la classe EtatGraphe. Ensuite nous avons dˆu cr´eer une classe par ´etat de modification des graphes. Chacune de ces classes h´erite de la classe EtatGraphe. Ces ´etats ne red´efinissent que les ´ecouteurs d’´ev´enements souris dont ils ont besoin. Et donc, lorsque le graphe graphique sera dans un ´etat qui effectue une tˆache lors d’un relˆachement de bouton souris, une action effective sera effectu´ee sur le graphe. D’autre part, certains modes de modification du graphe doivent utiliser deux ´etats, par exemple la cr´eation d’arˆetes ou bien le d´eplacement de sommets, d’arˆetes ou d’une s´election. Car lors de la cr´eation de la cr´eation d’une arˆete, par exemple, nous commen¸cons par modifier l’´etat de notre machine `a l’aide d’une nouvelle instance de la classe DebutCr´eationArete(GrapheGraphique g), qui permet de s´electionner le nœud d’origine de l’arˆete et, lorsque ce dernier est s´electionn´e, nous modifions l’´etat courant du GrapheGraphique

`

a l’aide d’une nouvelle instance de la classe SuiteCreationArete(GrapheGraphique g), qui permet de

D´eveloppement 34 3.3 Interface

s´electionner le nœud extr´emit´e de la nouvelle arˆete et de la cr´eer par la suite.

Voir la Figure 4.2 en annexe page 47 repr´esentant le diagramme de classes de la gestion du pattern ´etat pour le graphe graphique.

Liste des diff´erents ´etats possibles du graphe :

– Attente : L’´etat de base ou l’on ne peut pas modifier le graphe.

– ApplicationCouleur : Cet ´etat, lorsqu’il est actif, permet d’appliquer une couleur s´ elec-tionn´ee `a n’importe quel ´el´ement du graphe.

– Cr´eationSommet : Cet ´etat permet l’ajout d’un sommet lors d’un clic souris sur le panneau du graphe.

– DebutCreationArete : Permet de passer `a la premi`ere ´etape de la cr´eation d’une arˆete, c’est-`a-dire la s´election de l’origine de cette derni`ere.

– SuiteCreationArete : Permet de s´electionner l’extr´emit´e de la nouvelle arˆete et ainsi de la cr´eer.

– DebutDeplacement : Permet de s´electionner un ´el´ement du graphe que l’on souhaite d´eplacer, cela peut ˆetre un sommet ou une arˆete.

– SuiteDeplacement: Dans cet ´etat, on peut effectuer le d´eplacement effectif de l’´el´ement souhait´e.

– DebutDeplacementSelection : Cet ´etat permet de cliquer sur l’un des ´el´ements de l’ensemble des ´el´ements s´electionn´es.

– SuiteDeplacementSelection : Permet de faire le d´eplacement effectif de toute la s´ elec-tion, `a partir de l’´el´ement cliqu´e dans l’´etat « DebutDeplacementSelection ».

– Selection : Cet ´etat permet de s´electionner un ensemble d’´el´ements du graphe en vue d’un d´eplacement ou d’une suppression future.

– SelectionSommetAlgo : Permet de s´electionner deux sommets du graphe afin d’appli-quer un algorithme entre les deux sommets concern´es.

– EtiquetageSommet: Permet de modifier l’´etiquette d’un sommet«cliqu´e»au pr´ealable par l’utilisateur.

– EtiquetageArete : Permet de modifier la pond´eration d’une arˆete apr`es que celle-ci ait

´

et´e «cliqu´ee» par l’utilisateur

3.3 Interface 35 D´eveloppement

3.3.2.3.2 La m´ethode de dessin du GrapheGraphique

Le graphe graphique ´etant une sp´ecification de JPanel, il poss`ede par h´eritage une m´ethode paintComponent. Cette m´ethode permet de dessiner sur le panneau, grˆace `a des classes graphiques telles que Graphics ou Graphics2D. Dans notre cas, nous avons utilis´e la classe Graphics2D qui offre de plus grandes possibilit´es concernant le dessin. De plus, nous pouvons appliquer des effets concernant le rendu final d’affichage, beaucoup plus cons´equents qu’avec Graphics.

Pour dessiner concr`etement un graphe, dans notre m´ethode paintComponent, nous parcou-rons dans un premier temps la liste contenant tous les nœuds. C’est `a dire, que nous appelons pour chacun d’eux leur m´ethode de dessin en lui sp´ecifiant le contexte graphique du graphe, ainsi le nœud est dessin´e sur le panneau du graphe. Par la suite, nous faisons de mˆeme pour la liste des arˆetes du graphe.

3.3.2.3.3 Ecouteurs d’´ev´enements souris du GrapheGraphique

Le graphe graphique est impl´ement´e de sorte `a ´ecouter les ´ev´enements souris exerc´es sur lui-mˆeme. Ces ´ev´enements sont de deux types : les actions sur les boutons de souris (bouton press´e, bouton relˆach´e) et les mouvements de souris (souris d´eplac´ee avec le bouton press´e).

Comme nous l’avons dit pr´ec´edemment, ces ´ecouteurs ne fonctionnent que si la classe Gra-pheGraphique est dans un ´etat bien pr´ecis. C’est-`a-dire que les m´ethodes d’ajout de sommet ou d’arˆete, les m´ethodes d’´etiquetage de nœuds ou d’arˆetes, celles de s´election ou bien celle d’appli-cation de couleur ne fonctionneront que si la machine est dans l’´etat leur correspondant et qu’un

´ev`enement de type« bouton relˆach´e » (mouseReleased) est exerc´e sur le graphe graphique. Car ces m´ethodes ne sont d´efinies que pour des ´etats du graphe bien pr´ecis.

Les ´etats pour lesquels l’´ev´enement « bouton de souris press´e » (mousePressed) est d´efini, sont principalement li´es au d´ebut de l’un des divers d´eplacements possibles sur le graphe graphique, tels que le d´eplacement de sommets, d’arˆetes ou d’une s´election compl`ete. Lorsque la souris est press´ee sur l’un des ´el´ements et que l’´etat courant du graphe correspond `a un d´eplacement possible, des calculs sont effectu´es selon le type d’´el´ement `a d´eplacer. Ceci permet de garder le graphe dans un ´etat coh´erent et correspondant `a la volont´e de l’utilisateur.

Enfin les ´etats pour lesquels l’´ev´enement « souris d´eplac´ee avec le bouton press´e» (mouse-Dragged) est d´efini, correspondent uniquement `a la suite de l’un des d´eplacements possibles sur le graphe. Apr`es que les calculs aient ´et´e effectu´es lors de l’appui sur le bouton, on actualise la position de l’´el´ement ou de la s´election d´eplac´e, `a l’aide des coordonn´ees du nouveau point o`u se situe le curseur, et des calculs effectu´es dans le mousePressed.

Quel que soit l’´ecouteur utilis´e, nous utilisons les coordonn´ees du point o`u se trouve le curseur pour effectuer nos actions sur le graphe.

D´eveloppement 36 3.3 Interface

Dans le document Visualisation de Graphes (Page 34-37)

Documents relatifs