Je suis toujours sur le sudoku et j'aimerais bien modifier ma grille suivant certains evenements donc pour cela j'utilise repaint() et update() mais jpige pas tout.
Je desire mettre une case en rouge si on a cliqué dessus:
Les commentaires sont relatifs a une solution que j'avais essayé avant avec des champs de texte mais pas moyen de les faire disparaitre une fois la valeur entrée dans une case..
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 public void mouseClicked(MouseEvent e){ int x = e.getX(); int y = e.getY(); state = 0; System.out.println("x="+x+","+"y="+y); //square = new JTextField(); abs = (new Double(9*x/taille)).intValue(); ord = (new Double(9*y/taille)).intValue(); repaint(taille*abs/9,taille*ord/9,taille/9,taille/9; //square.setBounds(taille*abs/9,taille*ord/9,taille/9,taille/9); //this.add(square); }
Quand on entre une valeur au clavier, j'ai le traitement suivant:
et donc je redefinis la methode update comme suit:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 public void keyTyped(KeyEvent e){ state = 1; car = e.getKeyChar(); if (car >= '1' && car <= '9') repaint(taille*abs/9,taille*ord/9,taille/9,taille/9); }
Seul le else de la fonction update fonctionne (quand on clique sur le bouton "resoudre" mais je l'ai pas mis ici)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 public void update(Graphics g){ if (state == 0){ paint(g); g.setColor(Color.RED); g.fillRect(taille*abs/9,taille*ord/9,taille/9,taille/9); } else if (state == 1){ //value = Integer.parseInt(square.getText()); grille[abs][ord] = (new Integer(car)).intValue(); paint(g); }else{ for (int i = 0 ; i < 9; i++){ for(int j = 0 ; j < 9; j++) g.drawString(""+grille[i][j],taille/18+taille*j/9,taille/18+taille*i/9); } } }
Pour finir la surcharge de paint:
Vous avez des explications (ne vous moquez pas si j'ai rien compris)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 public void paint(Graphics g){ super.paint(g); for(int i = 0; i <= 9; i++) { g.drawLine(taille*i/9,0,taille*i/9,taille); g.drawLine(0,taille*i/9,taille,taille*i/9); } for(int i = 0; i <= 3; i++) { g.drawLine(taille*i/3+1,0,taille*i/3+1,taille); g.drawLine(0,taille*i/3+1,taille,taille*i/3+1); g.drawLine(taille*i/3-1,0,taille*i/3-1,taille); g.drawLine(0,taille*i/3-1,taille,taille*i/3-1); } for (int i = 0 ; i < 9; i++){ for(int j = 0 ; j < 9; j++) { if (grille[i][j] != 0) g.drawString(""+grille[i][j],taille/18+taille*j/9,taille/18+taille*i/9); } }
Partager