diff --git a/SaveButton.java b/SaveButton.java index 4d4c288..0859063 100644 --- a/SaveButton.java +++ b/SaveButton.java @@ -29,13 +29,23 @@ public class SaveButton implements ActionListener { private void saveFichier() { try { - FileOutputStream fr = new FileOutputStream("Test1.gri"); + FileOutputStream fr = new FileOutputStream("GrilleNum1.gri"); DataOutputStream fichier = new DataOutputStream(fr); JTextField[][] texte = grid; for (int i = 0; i < GRID_SIZE; i++) { StringBuilder build = new StringBuilder(); for (int j = 0; j < GRID_SIZE; j++) { String value = texte[i][j].getText(); + // Vérifier si la case contient plus d'un chiffre + if (value.length() > 1) { + JOptionPane.showMessageDialog(null, "Une case comporte plus d'un chiffre. Veuillez corriger avant de sauvegarder.", "Erreur", JOptionPane.ERROR_MESSAGE); + try { + fichier.close(); + } catch (IOException e) { + System.err.println("Erreur de fermeture"); + } + return; // Arrêter la sauvegarde si une case comporte plus d'un chiffre + } if (value.isEmpty()) { build.append("0"); } else { @@ -46,10 +56,15 @@ public class SaveButton implements ActionListener { int write = Integer.parseInt(convert); fichier.writeInt(write); } - fichier.close(); + try { + fichier.close(); + } catch (IOException e) { + System.err.println("Erreur de fermeture"); + } JOptionPane.showMessageDialog(null, "Grille sauvegardée avec succès.", "Succès", JOptionPane.INFORMATION_MESSAGE); } catch (IOException e) { JOptionPane.showMessageDialog(null, "Erreur lors de la sauvegarde de la grille.", "Erreur", JOptionPane.ERROR_MESSAGE); + e.printStackTrace(); } } diff --git a/SudokuGridConcepteur.java b/SudokuGridConcepteur.java index 98d4d3b..9024f49 100644 --- a/SudokuGridConcepteur.java +++ b/SudokuGridConcepteur.java @@ -19,7 +19,7 @@ public class SudokuGridConcepteur extends JFrame { for (int j = 0; j < GRID_SIZE; j++) { grid[i][j] = new JTextField(); - TextFilter filtre = new TextFilter(grid[i][j], GRID_SIZE, grid, i, j); + TextFilter filtre = new TextFilter(grid[i][j], GRID_SIZE, grid, i, j, status); grid[i][j].addKeyListener(filtre); grid[i][j].setHorizontalAlignment(JTextField.CENTER); diff --git a/SudokuGridJoueur.java b/SudokuGridJoueur.java index 9de3c46..4998c44 100644 --- a/SudokuGridJoueur.java +++ b/SudokuGridJoueur.java @@ -19,7 +19,7 @@ public class SudokuGridJoueur extends JFrame { for (int j = 0; j < GRID_SIZE; j++) { grid[i][j] = new JTextField(); - TextFilter filtre = new TextFilter(grid[i][j], GRID_SIZE, grid, i, j); + TextFilter filtre = new TextFilter(grid[i][j], GRID_SIZE, grid, i, j, status); grid[i][j].addKeyListener(filtre); grid[i][j].setHorizontalAlignment(JTextField.CENTER); diff --git a/TextFilter.java b/TextFilter.java index 39e1bf2..57bf8bf 100644 --- a/TextFilter.java +++ b/TextFilter.java @@ -2,7 +2,7 @@ import java.awt.event.*; import javax.swing.*; import java.awt.Color; import java.util.ArrayList; - +import java.awt.Font; public class TextFilter extends KeyAdapter { @@ -12,12 +12,14 @@ public class TextFilter extends KeyAdapter { private int row; private int col; private ArrayList bad_numbers = new ArrayList(); + private boolean errorDetected = true; + private int status; - - public TextFilter (JTextField t,int GRID_SIZE, JTextField[][] grid, int i, int j) { + public TextFilter (JTextField t,int GRID_SIZE, JTextField[][] grid, int i, int j, int status) { this.Text = t; this.GRID_SIZE = GRID_SIZE; + this.status = status; this.grid = grid; this.row = i; this.col = j; @@ -31,35 +33,67 @@ public class TextFilter extends KeyAdapter { char chiffre = e.getKeyChar(); int taille = this.Text.getText().length(); - if ( ((chiffre < '0') || (chiffre > '9')) && (chiffre != KeyEvent.VK_BACK_SPACE)) { + // Si la longueur du texte est égale à 3 après l'ajout du chiffre, définir la taille de la police à 20 + if (taille > 1) { + Text.setFont(new Font("Verdana", Font.BOLD, 20)); + } else { + + Text.setFont(new Font("Verdana", Font.BOLD, 40)); + } + + if ( ((chiffre < '1') || (chiffre > '9')) && (chiffre != KeyEvent.VK_BACK_SPACE)) { e.consume(); // ignorer l'événement } - if ( ((chiffre >= '0') && (chiffre <= '9')) && (chiffre != KeyEvent.VK_ENTER)) { - GrilleValide(chiffre); - } + if (status == 2){ + if (errorDetected) { + if ((chiffre >= '1') && (chiffre <= '9')) { + GrilleValide(chiffre); + } + } else { + e.consume(); // empêcher la saisie de chiffres lorsque qu'une erreur est détectée + } - if ((!bad_numbers.isEmpty()) && (chiffre == KeyEvent.VK_BACK_SPACE)) { + if ((!bad_numbers.isEmpty()) && (chiffre == KeyEvent.VK_BACK_SPACE)) { + Text.setBackground(Color.white); + while (!bad_numbers.isEmpty()) { + grid[bad_numbers.removeFirst()][bad_numbers.removeFirst()].setBackground(Color.white); + } + errorDetected = true; // Réinitialiser errorDetected après avoir corrigé les erreurs + } - Text.setBackground(Color.white); + if ( taille >= 4) { - while(!bad_numbers.isEmpty()) { + e.consume(); + } + } else if(status == 1){ + if ( taille > 1 && ((chiffre >= '1') && (chiffre <= '9')) && (chiffre != KeyEvent.VK_ENTER)) { - grid[bad_numbers.removeFirst()][bad_numbers.removeFirst()].setBackground(Color.white); - } + GrilleValide(chiffre); + } + + if ((!bad_numbers.isEmpty()) && (chiffre == KeyEvent.VK_BACK_SPACE)) { + + Text.setBackground(Color.white); + + while(!bad_numbers.isEmpty()) { + + grid[bad_numbers.removeFirst()][bad_numbers.removeFirst()].setBackground(Color.white); + } + } + + if ( taille >= 1 ) { + + e.consume(); + } } if ( (bad_numbers.isEmpty()) && (chiffre == KeyEvent.VK_BACK_SPACE)) { Coloriage(); } - - if ( taille >= 1 ) { - - e.consume(); - } } @@ -77,7 +111,7 @@ public class TextFilter extends KeyAdapter { this.grid[row][col].setBackground(Color.red); this.bad_numbers.add(row2); this.bad_numbers.add(col); - + errorDetected = false; } } } @@ -90,6 +124,7 @@ public class TextFilter extends KeyAdapter { this.grid[row][col].setBackground(Color.red); this.bad_numbers.add(row2); this.bad_numbers.add(col); + errorDetected = false; } } } @@ -104,6 +139,7 @@ public class TextFilter extends KeyAdapter { this.grid[row][col].setBackground(Color.red); this.bad_numbers.add(row); this.bad_numbers.add(col2); + errorDetected = false; } } @@ -117,6 +153,7 @@ public class TextFilter extends KeyAdapter { this.grid[row][col].setBackground(Color.red); this.bad_numbers.add(row); this.bad_numbers.add(col2); + errorDetected = false; } } } @@ -138,6 +175,7 @@ public class TextFilter extends KeyAdapter { this.grid[row][col].setBackground(Color.red); this.bad_numbers.add(row2); this.bad_numbers.add(col2); + errorDetected = false; } } }