Bonjour,
Je réalise un jeu en java ou j'utilise un dragndrop pour déplacer des cases sur une grille.
J'ai réussi à faire un dragndrop sans trop de difficultés en m'inspirant d'ailleurs d'un très bon article dans la faq java sur ce site.
Et donc cela fonctionne très bien, le déplacement de mes boutons sur la grille se font très bien.
Le hic c'est que maintenant sur le JPanel de fond ou y la grille avec l'ensemble de mes cases, j'ai mis une image de fond.
Pour ce faire j'ai crée une classe héritant de JPanel et redéfinit la méthode paintComponent :
L'image s'affiche bien pas de soucis à ce niveau là. Mais lorsque je drag un de mes boutons, l'application rame à mort, et le déplacement des jetons devient difficile voire impossible.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 public void paintComponent(Graphics g) { boolean test = g.drawImage(image, 0, 0, this); }
En faisant un petit system.out.println dans la fonction paintComponent, je me suis rendu compte que le fait que lors du dragndrop la méthode paintComponent était appellé à chaque déplacement ne serait ce que d'un pixel, et je pense que c'est ça qui fait ramer. C'est une image du fond sur l'ensemble du panel et ca doit être trop gourmand pour être réaffiché plus de 1000 fois à chaque mouvement de souris![]()
Quelle solution pourrai je utiliser soit pour éviter que la méthode paintComponent du panel soit appelée lorsque je dragndrop un composant dessus. Ou alors y a t-il un moyen d'optimiser les performances, ou ma méthode pour afficher l'image de fond du panel n'est pas la bonne ?
Partager