2010-11-17 5 views
4

Je crée une application qui contient un java.awt.Canvas pour afficher une séquence de nœuds conectés comme dans un graphique. lors de l'édition, le dernier point est connecté au curseur de la souris avec un java.awt.geom.Line2D de sorte qu'il doit être repeint à chaque fois que l'utilisateur bouge la souris, et il provoque un effet vraiment dégoûtant-flashy sur l'écran.Le canevas clignote lorsqu'il est constamment repeint

Je l'ai fait une fois, et je sais que la solution était si simple et n'a pas besoin d'un code vraiment difficile, mais mess avec paint(g), repaint(g) et update(g) méthodes, malgré cela, je ne peux pas arriver à le résoudre et J'espère que quelqu'un peut m'aider!

Un grand merci d'avance !! :)

+0

Qu'est-ce qu'un 'Canvas'? – Mot

+0

Regardez la classe java.awt.Canvas de l'API Java. Un composant Canvas représente une zone rectangulaire vide de l'écran sur laquelle l'application peut dessiner ou à partir de laquelle l'application peut intercepter les événements d'entrée de l'utilisateur. – DaveJohnston

Répondre

4

Vous devez faire double tampon pour se débarrasser du scintillement. Des tonnes d'exemples si vous google pour cela.

J'ai trouvé un précédent question qui a plus d'infos. Voici un autre example.

+0

Merci Erik, j'ai déjà pensé au double tampon, mais j'étais sûr qu'il y avait une option encore plus facile, que j'avais sûrement trouvée sur le net, mais maintenant je ne m'en souviens plus (le fait est que je l'ai programmé une fois avant, mais j'ai perdu la seule copie puisque je ne l'ai pas sauvegardée) :( – Dane411

+0

J'ai vu dans la réponse acceptée, dans le lien que vous m'avez donné ce morceau de code: mise à jour publique (Graphics g) { // remplacer cela parce que l'implémentation par défaut toujours // appelle d'abord clearRect, provoquant scintillement indésirable peinture (g); } Qui, sur la base des commentaires semble être la solution que j'ai pris la première fois, mais ne semble pas fonctionner , puisque je continue à voir ces flashs Qu'est-ce qui aurait pu arriver à ne pas fonctionner cette fois? – Dane411

+0

@ Dane411 - Je n'ai pas fait de double tampon depuis 1998 pour un cours universitaire, mais cela devrait être très simple. Essayez l'autre exemple ou google. Si vous ne pouvez pas le faire fonctionner le code post et peut-être quelqu'un peut vous aider – willcodejavaforfood

1

Voici un tutoriel sur le double buffering http://download.oracle.com/javase/tutorial/extra/fullscreen/doublebuf.html

L'idée est fondamentalement que vous dessinez une image hors écran, puis une fois que vous avez fini de dessiner l'image entière peindre cette image à l'écran.

+0

Belle leçon, mais BufferStrategy n'a pas fonctionné pour moi, une sorte d'exception, de toute façon j'ai corrigé le scintillement avec un BufferedImage :) – Dane411