Hey !
J'essaye depuis peu de faire un petit jeu avec interface graphique (Light Out), tout fonctionne à merveille, j'ai donc décidé d'y ajouter un solveur que l'on peut déclencher en cliquant sur la touche espace du clavier et c'est là où se pose mon problème...
Mon interface est composé d'une grille de JPanel (Un objet en héritant nommé "Case"), le solveur a pour effet de changer la texture de la case sur laquelle il faut cliquer (une fois cliqué, on passe à la suivante ainsi de suite) mais il s'avère que j'ai un "bug" d'actualisation qui semble être aléatoire... En effet, il arrive à peu près une fois sur deux que la texture ne s'applique bien, bien que le paintComponent semble bien exécuté.
Voici donc mon code :
La variable "imagePath" est une variable globale contenant le lien vers l'image à afficher.
Code java : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 protected void paintComponent(Graphics g) { super.paintComponent(g); try { BufferedImage imageB = ImageIO.read(new File(imagePath)); g.drawImage(imageB, 0, 0, getSize().width, getSize().height, null); } catch (IOException e) { e.printStackTrace(); } setBorder(border); }
Voici la fonction s'occupant de définir la texture de la case pour le solveur :
Cette méthode est ensuite appelé par l'algorithme gérant le solveur :
Code java : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 public void highlight(boolean bool) { if(bool) { imageTemp = imagePath; imagePath = "img/solve.png"; } else { imagePath = imageTemp; } repaint(); }
Cette fonction, a chaque fois qu'elle est appelé, dit à la case de changer sa texture, cette méthode est ensuite appelé à chaque fois que le joueur clic sur la case activé précédemment par le solveur.
Code java : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 public static void nextClue() { if (i < toType.size()) { LightOut.grid[toType.get(i).getX()][toType.get(i).getY()].highlight(true); i++; } }
Voici pour mon code, le problème étant donc qu'il arrive parfois que bien que le paintComponent s'active, la texture de la case ne s'actualise pas...
Sauriez-vous comment résoudre ce problème ?
Merci par avance !
Partager