Question

Je tente de créer une applet Java qui me permettra de dessiner une structure de données graphique dans un canevas. Pour ce faire, je clique là où je veux créer des nœuds, puis en cliquant sur les nœuds pour les connecter. Le problème est que je ne peux pas obtenir le comportement correct de la méthode paint () . J'ajoute de nouveaux nœuds au graphique (et des carrés sur la grille) à l'intérieur de la méthode mousePressed (MouseEvent e) à l'aide de,

Graphics g = this.getGraphics();
g.setColor(Color.blue);
g.fillRect(e.getX(), e.gety(), 40, 40);

Tout fonctionne bien, jusqu'à ce que je redimensionne la fenêtre, puis tous les rectangles remplis disparaissent. J'ai remplacé la méthode paint par une méthode vide, mais la même chose se produit. Je ne peux pas ajouter les commandes fillRect dans paint () car je ne sais pas quels rectangles existent tant que l'utilisateur n'interagit pas avec la souris.

Comment puis-je utiliser g.fillRect () dans les méthodes d'écoute de la souris et les faire coller?

Était-ce utile?

La solution

Le problème est que l'endroit où vous dessinez n'est pas persistant. À tout moment, vous pouvez perdre tout ce que vous avez attiré. La méthode paint (Graphics) est appelée lorsque cela se produit. Soit vous devez repeindre l’ensemble de la photo chaque fois que cela se produit, ou vous devez réserver un canevas pour dessiner et copier le contenu sur les graphiques de votre applet, si nécessaire.

Voici comment créer et dessiner une image:
http://java.sun.com/docs/books/tutorial/2d/images/drawonimage.html

Ensuite, dans votre méthode de peinture, utilisez la méthode drawImage (...) de Graphics pour afficher l'image que vous avez créée.

Autres conseils

Je ne sais pas si je lis ceci correctement, mais pourquoi ne pas simplement enregistrer l'emplacement du dernier clic dans une variable à peindre ultérieurement, lorsque la méthode paint () est appelée?

Vous devez remplacer l'écouteur d'action de redimensionnement de la fenêtre et appeler repeindre à l'intérieur.

Le graphique est temporaire. Quand une région est sale, elle sera repeinte.

Le meilleur moyen est de créer une BufferedImage, de peindre dessus avec mousePressed et d’appeler repaint.
Lorsque la peinture est appelée, dessinez l'image sur l'objet graphique transmis. De cette façon, vous n'avez pas besoin de stocker les Rectangles et vous avez un tampon qui améliorera les performances.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top