-
Table à Dessin
Bonjour,
Je suis débutant dans le dessin en Java.
Je souhaiterais créer une table à dessin en swing.
Mon premier pb c'est que concrètement je ne sais pas ce que doit être la table à dessin ? je crois avoir lu que c'était une classe qui hérite de JComponent, nan ? et ensuite je fais quoi ? un JPanel qui représentera ma zone à dessin ?
Ensuite les écouteurs sur les clic de souris, je les construits comment, et sur quoi ?
Merci.
-
Cela depend de ce que tu entends exactement par "table a dessin". S'il s'agit d'un composant d'une certaine taille sur la surface duquel tu veux pouvoir dessiner a la souris, cela s'appelle plus communement canvas (note : je ne parle pas ici de la classe Canvas) ou encore surface de rendu/dessin.
Dans ce cas oui, une classe maison heritee de JComponent ou de JPanel fera tres bien l'affaire. Les ecouteurs de clics de souris sont a mettre sur cette classe. Une erreur courante est, a la reception d'un clic, de recuperer le Graphics d'un composant via getGraphics() et de dessiner directement dedans ; c'est quelque chose a ne pas faire*. Tu dois effectuer un traitement en reaction du clic et appeler repaint() pour demander le rafraichissement de l'interface graphique.
Le probleme consiste alors pour toi a trouver un moyen de rendre ton dessin permanent en gardant une trace de ce que tu as dessine. Generalement, cela peut etre fait de deux maniere :
- lors de la reception du clic de la souris, tu dessines sur une image intermediaire (BufferedImage) contenue dans ce composant, puis tu appelles repaint(). La methode paintComponent() de ce composant se charge alors de dessiner cette image a l'ecran (on parle de composer l'image sur l'ecran). Si tu comptes realiser un logiciel de dessin bitmap, tu auras plus tendance a aller de ce cote.
- lors de la reception du clic de la souris, tu ajoutes un point dans une liste des points a colorier, puis tu appelles repaint(). La methode paintComponent() de ce composant se charge alors de parcourir cette liste et de colorier les pixels equivalents a l'ecran. Si tu comptes realiser un logiciel de dessin vectoriel ou si tu veux pouvoir dessiner et redimensionner des formes geometriques, tu auras plus tendance a aller de ce cote (et tu apprendra a gerer des formes plutot que de simples points). Cependant si au bout d'un certain temps ta liste de formes devient trop grosse, tes performances peuvent s'effondrer ; tu peux alors optimiser les performances en couplant cette solution avec la premiere pour eviter de redessiner toutes les formes a chaque fois.
Autre optimisation : dans un premier temps, puisque tu debutes, tu te contenteras d'appeler repaint() pour effectuer le re-affichage de l'interface. Quand tu auras une tres grosse image ou une longue liste de formes a gerer tu auras probablement envie d'optimiser un peu tout ca. Dans ce cas il ne faut pas hesiter a appeler la methode apparentee repaint(x, y, longueur, hauteur) qui ne rafraichie qu'une partie de l'affichage. En contrepartie, tu devras verifier dans la methode paintComponent() que ce que tu dessines est bien dans la zone de clip du Graphics (g.getClip()) de maniere a ne pas perdre du temps en dessinant des chose inutiles.
*La raison est que plus tard lorsque le composant sera raffraichit (par exemple apres avoir ete occulte), tout ce qui aura ete dessine disparaitra.
-
Ok merci bcp.
ça a l'air compliqué mais ça me donne des infos. Je vais pouvoir orienter mes recherche.
J'espère pas avoir besoin de revenir, à par pour vous dire que mon projet a aboutit ;)
-
diagramme de classe
salut, comment faire un diagramme de classe avec java2D
merci