(Java) grand nombre de champs de texte

Bonjour,

Y aurait-il un moyen astucieux de remplacer le code suivant ?

private void SudokuTextSet(int i, String string) {
if(i==0){jTextField1.setText(string);};
if(i==1){jTextField2.setText(string);};
if(i==2){jTextField3.setText(string);};
if(i==3){jTextField4.setText(string);};
if(i==4){jTextField5.setText(string);};
[...]
if(i==76){jTextField77.setText(string);};
if(i==77){jTextField78.setText(string);};
if(i==78){jTextField79.setText(string);};
if(i==79){jTextField80.setText(string);};
if(i==80){jTextField81.setText(string);};
}

Veuillez me proposer une manière élégante d'exploiter un grand nombre de champs de texte.

Merci

17 réponses

  • Votes
  • Date
  • Date décroissante
  1. Salut,

    J'ai essayé de regarder ton code, mais bon, il n'est pas complet (post no. 9 tronqué) d'une part, d'autre part il est loooong ... :)

    Voici comment je commencerais le truc. NB: la JFrame est bel et bien créée et maintenue dans un plug-in de visualisation graphique d'Eclipse, sauf le tableau de SudokuTF qui nous intéresse; à la différence de NetBeans qui met partout des warnings pour ne pas modifier le code généré automatiquement par ses soins (sous peine de le voir disparaître à la prochaine génération), WindowBuilder n'aurait le moindre problème pour avaler ceci et le laisser en état lors de la regénération même si on avait l'appel à createCells() dans le constructeur de la classe.
    package sudoku;
    
    import java.awt.BorderLayout;
    import java.awt.FlowLayout;
    import java.awt.GridLayout;
    import java.awt.event.KeyAdapter;
    import java.awt.event.KeyEvent;
    
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JTextField;
    
    public class Azerty363Sample extends JFrame {
    	private static final long serialVersionUID = 1L;
    
    	private JPanel centerPane;
    	private final int DIMENSION = 9;
    	private final int NO_OF_CELLS = DIMENSION * DIMENSION;
    	private SudokuTF[] cells;
    
    	/**
    	 * Ceci est une classe qui pourrait s'avérer utile dans ton contexte; elle retient, par exemple, sa position dans la
    	 * grille (ligne et colonne); regarde plus bas comment ces valeurs peuvent être exploitées dans le listener.
    	 * D'autres attributs utiles peuvent être rajoutés à cette inner class.
    	 */
    	private class SudokuTF extends JTextField {
    		private static final long serialVersionUID = 1L;
    		private int row, col;
    
    		public SudokuTF(int row, int col) {
    			this.row = row;
    			this.col = col;
    		}
    
    		private int getCol() {
    			return col;
    		}
    
    		private int getRow() {
    			return row;
    		}
    	}
    
    	public static void main(String args[]) {
    		try {
    			Azerty363Sample frame = new Azerty363Sample();
    			frame.createCells();
    
    			frame.setVisible(true);
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    
    	public Azerty363Sample() {
    		super();
    		setBounds(100, 100, 375, 375);
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
    		final JPanel panel = new JPanel();
    		final FlowLayout flowLayout = new FlowLayout();
    		flowLayout.setAlignment(FlowLayout.RIGHT);
    		panel.setLayout(flowLayout);
    		getContentPane().add(panel, BorderLayout.SOUTH);
    
    		final JButton helpButton = new JButton();
    		helpButton.setText("Help");
    		panel.add(helpButton);
    
    		getContentPane().add(getCenterPane(), BorderLayout.CENTER);
    		//
    	}
    
    	protected JPanel getCenterPane() {
    		if (centerPane == null) {
    			centerPane = new JPanel();
    			final GridLayout gridLayout = new GridLayout(DIMENSION, DIMENSION);
    			gridLayout.setHgap(2);
    			centerPane.setLayout(gridLayout);
    		}
    		return centerPane;
    	}
    
    	// create Cells <== écrite en dehors de la génération graphique WindowBuilder
    	private void createCells() {
    		cells = new SudokuTF[NO_OF_CELLS];
    		for (int i = 0; i < NO_OF_CELLS; i++) {
    			cells[i] = new SudokuTF(i / DIMENSION, i % DIMENSION);
    			// Ici tu vas mettre tout le code nécessaire pour bien gérer la cellule qui vient d'être créée:
    			// Positionnement du texte (center), un seul caractère autorisé (chiffre de 0 à 9), éventuellement le font...
    			// Egalement un listener pour chaque cell, car probablement tu voudras modifier l'affichage
    			// dès qu'une mauvaise valeur est rentrée (genre changer la couleur et la dessiner en rouge)
    
    			// Exemple de listener:
    			cells[i].addKeyListener(new KeyAdapter() {
    				@Override
    				public void keyReleased(KeyEvent e) {
    					SudokuTF cell = (SudokuTF) e.getSource();
    					System.out.println("nouvelle valeur à la position [" + cell.getRow() + ":" + cell.getCol() + "] ==> "
    							+ cell.getText());
    				}
    			});
    			getCenterPane().add(cells[i]);
    		}
    	}
    }
    
    
    1. Hello again,

      Voici le même code, modifié un peu pour te montrer
      - comment appeler la méthode de vérification
      - comment centrer et contrôler l'input d'une cellule (max 1 chiffre autorisé)
      package sudoku;
      
      import java.awt.BorderLayout;
      import java.awt.Color;
      import java.awt.FlowLayout;
      import java.awt.GridLayout;
      import java.awt.event.KeyAdapter;
      import java.awt.event.KeyEvent;
      import java.text.ParseException;
      import java.util.Random;
      
      import javax.swing.JButton;
      import javax.swing.JFormattedTextField;
      import javax.swing.JFrame;
      import javax.swing.JPanel;
      import javax.swing.JTextField;
      import javax.swing.text.MaskFormatter;
      
      public class Azerty363Sample extends JFrame {
      	private static final long serialVersionUID = 1L;
      
      	private JPanel centerPane;
      	private final int DIMENSION = 9;
      	private final int NO_OF_CELLS = DIMENSION * DIMENSION;
      	private SudokuTF[] cells;
      
      	// Disons que la valeur rentrée n'est pas correcte ==> changer le background de la cellule
      	// Pour cette démo, on va le faire aléatoirement une fois sur 2; rand va nous générer
      	// des valeurs aléatoires
      	Random rand = new Random(65626329562l);
      
      	/**
      	 * Ceci est une classe qui pourrait s'avérer utile dans ton contexte; elle retient, par exemple, sa position dans la
      	 * grille (ligne et colonne); regarde plus bas comment ces valeurs peuvent être exploitées dans le listener. D'autres
      	 * attributs utiles peuvent être rajoutées à cette classe.
      	 */
      	private class SudokuTF extends JFormattedTextField {
      		private static final long serialVersionUID = 1L;
      		private int row, col;
      
      		public SudokuTF(int row, int col, MaskFormatter format) {
      			super(format);
      			this.row = row;
      			this.col = col;
      		}
      
      		private int getCol() {
      			return col;
      		}
      
      		private int getRow() {
      			return row;
      		}
      	}
      
      	public static void main(String args[]) {
      		try {
      			Azerty363Sample frame = new Azerty363Sample();
      			frame.createCells();
      
      			frame.setVisible(true);
      		} catch (Exception e) {
      			e.printStackTrace();
      		}
      	}
      
      	public Azerty363Sample() {
      		super();
      		setBounds(100, 100, 375, 375);
      		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      
      		final JPanel panel = new JPanel();
      		final FlowLayout flowLayout = new FlowLayout();
      		flowLayout.setAlignment(FlowLayout.RIGHT);
      		panel.setLayout(flowLayout);
      		getContentPane().add(panel, BorderLayout.SOUTH);
      
      		final JButton helpButton = new JButton();
      		helpButton.setText("Help");
      		panel.add(helpButton);
      
      		getContentPane().add(getCenterPane(), BorderLayout.CENTER);
      		//
      	}
      
      	protected JPanel getCenterPane() {
      		if (centerPane == null) {
      			centerPane = new JPanel();
      			final GridLayout gridLayout = new GridLayout(DIMENSION, DIMENSION);
      			gridLayout.setHgap(2);
      			centerPane.setLayout(gridLayout);
      		}
      		return centerPane;
      	}
      
      	// create Cells <== écrite en dehors de la génération graphique WindowBuilder
      	private void createCells() {
      		cells = new SudokuTF[NO_OF_CELLS];
      
      		// max un seul caractère autorisé (chiffre)
      		MaskFormatter formatter = null;
      		try {
      			formatter = new MaskFormatter("#");
      		} catch (ParseException e1) {
      			e1.printStackTrace();
      		}
      
      		for (int i = 0; i < NO_OF_CELLS; i++) {
      			cells[i] = new SudokuTF(i / DIMENSION, i % DIMENSION, formatter);
      
      			// Ici tu vas mettre tout le code nécessaire pour bien gérer la cellule qui vient d'être créée:
      			// Positionnement du texte (center), un seul caractère autorisé (chiffre de 0 à 9), éventuellement le font...
      			// Egalement un listener pour chaque cell, car probablement tu voudras modifier l'affichage
      			// dès qu'une mauvaise valeur est rentrée (genre changer la couleur et la dessiner en rouge)
      
      			cells[i].setHorizontalAlignment(JTextField.CENTER);
      			
      			// Exemple de listener:
      			cells[i].addKeyListener(new KeyAdapter() {
      				@Override
      				public void keyReleased(KeyEvent e) {
      					SudokuTF cell = (SudokuTF) e.getSource();
      
      					System.out.println("nouvelle valeur à la position [" + cell.getRow() + ":" + cell.getCol() + "] ==> "
      							+ cell.getText());
      
      					// on va vérifier ce que not' utilisateur a rentré
      					checkEnteredValue(cell);
      				}
      			});
      			getCenterPane().add(cells[i]);
      		}
      	}
      
      	// méthode qui vérifie si la valeur entrée est correcte
      	protected void checkEnteredValue(SudokuTF currentCell) {
      		if (rand.nextBoolean()) {
      			currentCell.setBackground(Color.RED);
      		} else {
      			currentCell.setBackground(Color.WHITE);
      		}
      	}
      }
      


      Voilou, amuse-toi bien,
      ++
      1. je ne suis pas sûr de moi, je débute en Java, cependant un algoritme qui pourait t'aider
        cependant j'ai besoin de savoir, ton but est-il comme je l'ai compris de rentré un texte dans le text field ainsi sélectionné?
        explique toi plus... parce uqe ton morceau de code... on peut comme ça le réduire grace à un truc genre jtextfield[i].setText... mais si je connais pas ton but personne ne poura te dire quoi
        1. Tu as tout compris

          Je programme un solveur de Sudoku.

          J'ai ma jolie interface graphique avec 81 cases, 1 beau bouton qui résout tout, 1 menu qui efface tout, qui sauvegarde, qui ouvre et qui ferme tout. Interface réalisé avec NetBeans avec une interface swing machin.

          J'ai besoin d'accèder à mes cases de manière éfficace.

          un truc genre jtextfield[i].setText, j'y avais pensé mais j'étais pas sûre
          je sais pas tout ce qui faut modifier dans l'histoire
          et j'ai pas envie de remettre toutes les cases dans l'ordre
          1. normellement le propre d'un champ texte c'est que tu peux écrire ce que tu veux dedans dès que tu as la main.
            donc je vois pas pourquoi tu veux des If et des machins...
            ce que je voulais surtout savoir c'est à quoi correspond le fameux "i"
            1. Salut,

              Si tu veux utiliser un tableau de JTextField, c'est tout à fait possible (et recommandable dans ton cas); mais il ne faut plus compter sur l'interface graphique que NetBeans te propose pour construire ta fenêtre (il ne saura pas gérer ton tableau de textfield) ==> du coup, tu peux utiliser netbeans pour le reste si tu veux, mais tu construis dans une boucle le tableau de textfield en plaçant correctement chaque textfield et en ajoutant un listener dessus...). Au code généré par NetBeans tu ajoutes à la fin l'initialisation de ton tableau de textfield. Pas si compliqué que cela.

              ++
              1. pour la boucle je m'en doutais lol
                par contre j'ai ne question (je n'en reste pas moins un débutant).
                J'utilise Eclipse pour programmer, et j'entends souvent parler d'interface genre NetBeans, qu'est-ce que c'est comment l'utiliser comment l'obtenir?
                ha et aussi, peux-tu développer la mystérieuse ". Au code généré par NetBeans tu ajoutes à la fin l'initialisation de ton tableau de textfield" mreci (je suis débutant je le rappelle j'ai franchement envie d'apprendre alros svp)
                1. J'utilise Eclipse pour programmer, et j'entends souvent parler d'interface genre NetBeans, qu'est-ce que c'est comment l'utiliser comment l'obtenir? <== il y a un plug-in pour Eclipse (VE, Visual Editor) qui te permet de faire du développement graphique. Je l'ai utilisé longtemps (jusqu'à la version 3.3 d'Eclipse pour laquelle il n'était pas compatible, mais regarde sur eclipse.org quelle est la situation présente). Je l'ai remplacé entre temps par WindowsBuilder de chez Instantiations qui est vraiment excellent (mais payant).

                  NetBeans (gratuit) offre ce que VE offre/offrait aussi, mais c'est un autre IDE (de chez Sun). Je ne sais pas s'il y a un plug-in Eclipse à la sauce NetBeans (à part celui appelé Matisse et intégré dans MyEclipse)...

                  En ce qui concerne la génération en boucle du tableau, ce n'est pas compliqué, tu feras qqch comme

                  private void createTFields() {
                  tFields = new JTextField[TF_LENGTH]; // tu déclares l'array tFields dans ta classe comme private et TF_LENGTH est une constante
                  for (int i=0; i<TF_LENGTH; i++) {
                  tField[i] = new JTextField();
                  // ici tu positionnes le textfield dans le gridbaglayout ou le gridlayout de ta fenêtre et tu rajoutes un listener
                  }

                  Sorry si l'exemple est pauvre, mais je dois quitter à présent, si tu ne t'en sors pas, je vais essayer de poster demain un code plus complet.

                  ++
                  1. merci pour le Net beans
                    je verrais ça sur eclipse.org
                    pour la boucle, je savais que c'était comme ça (et ton exemple est très parlant lol) c'était "l'initialisation" qui me gênait... mais apparament je me suis posé des questions dans le vide puisque tout compte fait ce terme ne disait rien de plus que ce que je pensais lol. pour reprendre ton exemple
                    TF_LENGTH=81 ici et on part pas de 0 mais de 1 pour que ça soit plus lisible et plus compréhensible lol m^mee pour les débutant.
                    1. Cher Artagis,
                      NetBeans est l'équvalent de Eclipse proposé sur le site de Sun (donc ça doit être mieux^^)
                      C'est un logiciel qui permet de coder en Java, C, C++... dans une jolie interface avec des boutons pour simplfier la programmation. En gros, c'est Eclipse avec les mêmes boutons à un endroit différent. Du moins, je crois. J'avais installé Eclipse, il y a longtemps.

                      Pour vous expliquer ce fameux i, voici des extraits de code.

                      Extrait du code de résolution :
                      // Exploitation des contraintes sur une valeur.
                      for(int j=0;j<9;j++){

                      int a = 0;
                      int b = 0;
                      int c = 0;

                      // On compte les contraintes :
                      // a dans la ligne,
                      // b dans la colonne,
                      // c dans le carré.
                      for(int k=0;k<9;k++){
                      a = a + maxofconstrained[i][9*j+k];
                      b = b + maxofconstrained[i][j+9*k];
                      c = c + maxofconstrained[i][ (j-j%3)*9 +(j%3)*3 + (k-k%3)*3 + k%3 ];
                      }

                      // On modifie une ligne.
                      if(a==8){
                      for(int k=0;k<9;k++){
                      if(maxofconstrained[i][9*j+k]==0){
                      SudokuTextSet(9*j+k,IntToString(i));
                      }
                      }
                      }

                      // On modifie une colonne.
                      if(b==8){
                      for(int k=0;k<9;k++){
                      if(maxofconstrained[i][j+9*k]==0){
                      SudokuTextSet(j+9*k,IntToString(i));
                      }
                      }
                      }

                      // On modifie un carré.
                      if(c==8){
                      for(int k=0;k<9;k++){
                      if(maxofconstrained[i][(j-j%3)*9 +(j%3)*3 + (k-k%3)*3 + k%3]==0){
                      SudokuTextSet((j-j%3)*9 +(j%3)*3 + (k-k%3)*3 + k%3,IntToString(i));
                      }
                      }
                      }

                      }

                      Extrait du code d'ouverture :
                      public void OpenSudoku() throws FileNotFoundException, IOException {

                      System.out.println("----");

                      String nomRepertoire = "G:\\";
                      String nomFichier = "Sudoku.txt";

                      File fichier = new File(nomRepertoire, nomFichier);
                      FileReader in = new FileReader(fichier);

                      char[] data = new char[(int)fichier.length()];
                      in.read(data);
                      in.close();

                      String a;
                      for(int i=0;i<81;i++){
                      a = data[i]+"";
                      if(a.equalsIgnoreCase("0")){
                      SudokuTextSet(i,"");
                      }
                      else{
                      SudokuTextSet(i,data[i]+"");
                      }
                      }

                      System.out.println("Sudoku Opened");
                      System.out.println("----");

                      }

                      peux-tu développer la mystérieuse ". Au code généré par NetBeans tu ajoutes à la fin l'initialisation de ton tableau de textfield"
                      1. Pour ceux qui veulent voir le projet global pour mieux me répondre, copier-coller le long texte suivant.

                        /*
                        * SudokuView.java
                        */

                        package sudoku;

                        import java.io.FileNotFoundException;
                        import java.io.IOException;
                        import java.util.logging.Level;
                        import java.util.logging.Logger;
                        import org.jdesktop.application.Action;
                        import org.jdesktop.application.ResourceMap;
                        import org.jdesktop.application.SingleFrameApplication;
                        import org.jdesktop.application.FrameView;
                        import org.jdesktop.application.TaskMonitor;
                        import java.awt.event.ActionEvent;
                        import java.awt.event.ActionListener;
                        import java.io.File;
                        import java.io.FileReader;
                        import java.io.FileWriter;
                        import javax.swing.Timer;
                        import javax.swing.Icon;
                        import javax.swing.JDialog;
                        import javax.swing.JFrame;

                        /**
                        * The application's main frame.
                        */
                        public class SudokuView extends FrameView {

                        String SudokuText[] = new String[81];
                        int SudokuInt[] = new int[81];

                        public SudokuView(SingleFrameApplication app) {
                        super(app);

                        initComponents();

                        // status bar initialization - message timeout, idle icon and busy animation, etc
                        ResourceMap resourceMap = getResourceMap();
                        int messageTimeout = resourceMap.getInteger("StatusBar.messageTimeout");
                        messageTimer = new Timer(messageTimeout, new ActionListener() {
                        public void actionPerformed(ActionEvent e) {
                        statusMessageLabel.setText("");
                        }
                        });
                        messageTimer.setRepeats(false);
                        int busyAnimationRate = resourceMap.getInteger("StatusBar.busyAnimationRate");
                        for (int i = 0; i < busyIcons.length; i++) {
                        busyIcons[i] = resourceMap.getIcon("StatusBar.busyIcons[" + i + "]");
                        }
                        busyIconTimer = new Timer(busyAnimationRate, new ActionListener() {
                        public void actionPerformed(ActionEvent e) {
                        busyIconIndex = (busyIconIndex + 1) % busyIcons.length;
                        statusAnimationLabel.setIcon(busyIcons[busyIconIndex]);
                        }
                        });
                        idleIcon = resourceMap.getIcon("StatusBar.idleIcon");
                        statusAnimationLabel.setIcon(idleIcon);
                        progressBar.setVisible(false);

                        // connecting action tasks to status bar via TaskMonitor
                        TaskMonitor taskMonitor = new TaskMonitor(getApplication().getContext());
                        taskMonitor.addPropertyChangeListener(new java.beans.PropertyChangeListener() {
                        public void propertyChange(java.beans.PropertyChangeEvent evt) {
                        String propertyName = evt.getPropertyName();
                        if ("started".equals(propertyName)) {
                        if (!busyIconTimer.isRunning()) {
                        statusAnimationLabel.setIcon(busyIcons[0]);
                        busyIconIndex = 0;
                        busyIconTimer.start();
                        }
                        progressBar.setVisible(true);
                        progressBar.setIndeterminate(true);
                        } else if ("done".equals(propertyName)) {
                        busyIconTimer.stop();
                        statusAnimationLabel.setIcon(idleIcon);
                        progressBar.setVisible(false);
                        progressBar.setValue(0);
                        } else if ("message".equals(propertyName)) {
                        String text = (String)(evt.getNewValue());
                        statusMessageLabel.setText((text == null) ? "" : text);
                        messageTimer.restart();
                        } else if ("progress".equals(propertyName)) {
                        int value = (Integer)(evt.getNewValue());
                        progressBar.setVisible(true);
                        progressBar.setIndeterminate(false);
                        progressBar.setValue(value);
                        }
                        }
                        });
                        }

                        @Action
                        public void showAboutBox() {
                        if (aboutBox == null) {
                        JFrame mainFrame = SudokuApp.getApplication().getMainFrame();
                        aboutBox = new SudokuAboutBox(mainFrame);
                        aboutBox.setLocationRelativeTo(mainFrame);
                        }
                        SudokuApp.getApplication().show(aboutBox);
                        }

                        /**
                        * Détecte une erreur de remplissage de la grille par l'utilisateur.
                        * Retourne l'entier 0 s'il n'y a pas d'erreur.
                        * Retourne 100 + le numéro de case où se situe l'erreur.
                        *
                        * @param SudokuText
                        * @return integer a = 100 + integer i where a problem of character is found or 0 if not
                        */
                        private int CheckSudoku1(String[] SudokuText) {

                        int a=0;

                        // On vérifie que les cases sont vides ou avec un chiffre entre 1 et 9.
                        for(int i=0;i<81;i++){
                        if( SudokuText[i].equalsIgnoreCase("1") ||
                        SudokuText[i].equalsIgnoreCase("2") ||
                        SudokuText[i].equalsIgnoreCase("3") ||
                        SudokuText[i].equalsIgnoreCase("4") ||
                        SudokuText[i].equalsIgnoreCase("5") ||
                        SudokuText[i].equalsIgnoreCase("6") ||
                        SudokuText[i].equalsIgnoreCase("7") ||
                        SudokuText[i].equalsIgnoreCase("8") ||
                        SudokuText[i].equalsIgnoreCase("9") ||
                        SudokuText[i].equalsIgnoreCase("") ){}
                        else{return(100+i);}
                        }

                        return(a);

                        }

                        /**
                        * Détecte un non respect des régles du Sudoku.
                        * Retourne l'entier 0 s'il n'y a pas d'erreur.
                        * Retourne 200 + le numéro de case où se situe l'erreur.
                        *
                        * @param SudokuText
                        * @return integer a = 200 + integer i where a problem of no-respect of Sudoku'laws is found or 0 if not
                        */
                        private int CheckSudoku2(int[] SudokuInt) {

                        /* Tri postal pour verifier le respect des trois lois du sudoku.
                        * SudokuVerif[ligne,colonne,carré][n°][valeur] = nb d'apparition de
                        * la valeur dans la n° ligne,colonne,carré.
                        */

                        int a=0;
                        int SudokuVerif[][][] = new int[3][9][10];

                        // Initialise SudokuVerif.
                        for(int i=0;i<3;i++){
                        for(int j=0;j<9;j++){
                        for(int k=0;k<10;k++){
                        SudokuVerif[i][j][k]=0;
                        }
                        }
                        }

                        // Remplis SudokuVerif en fonction de SudokuInt.
                        for(int i=0;i<81;i++){
                        SudokuVerif[0][(i-i%9)/9][SudokuInt[i]]++;
                        SudokuVerif[1][i%9][SudokuInt[i]]++;
                        SudokuVerif[2][ ((i-i%9)/9-((i-i%9)/9)%3) + ((i%9)-(i%9)%3)/3 ][SudokuInt[i]]++;
                        }

                        // Traite les données de SudokuVerif.
                        for(int i=0;i<3;i++){
                        for(int j=0;j<9;j++){
                        for(int k=1;k<10;k++){
                        if(SudokuVerif[i][j][k]<2){}
                        else{return(200 + 10*(i+1) + (j+1));}
                        }
                        }
                        }

                        return(a);

                        }

                        /**
                        * Recherche les contraintes directement appliquées par les trois lois du
                        * Sudoku dans la case n.
                        *
                        * @param SudokuInt
                        * @param n
                        * @return int[] constrained : for each value, return 1 if there are any
                        * constrained, return 0 if not.
                        */
                        private int[] ConstrainedFinder(int[] SudokuInt,int n) {

                        // Definir variable
                        int constrained[] = new int[10];
                        int i=(n-n%9)/9;
                        int j=n%9;
                        int k=((n-n%9)/9-((n-n%9)/9)%3) + ((n%9)-(n%9)%3)/3;

                        // Initialiser
                        for(int l=0;l<10;l++){
                        constrained[l]=0;
                        }

                        // Vérifier
                        for(int l=0;l<9;l++){
                        // dans la ligne
                        constrained[SudokuInt[9*i+l]]=1;
                        // dans la colonne
                        constrained[SudokuInt[9*l+j]]=1;
                        // dans le carré
                        constrained[SudokuInt[(k-k%3)*9 + (k%3)*3 + (l-l%3)*3 + l%3 ]]=1;
                        }

                        return(constrained);

                        }

                        /**
                        * Transorme la grille Sudoku sous forme d'une liste de chaînes de
                        * caractères en une liste d'entiers.
                        *
                        * @param SudokuText
                        * @return int[] SudokuInt
                        */
                        private int[] ConvertSudokuStringToInt(String[] SudokuText) {
                        int SudokuIntL[] = new int[81];
                        for(int i=0;i<81;i++){SudokuIntL[i]=StringToInt(SudokuText[i]);}
                        return(SudokuIntL);
                        }

                        /**
                        * Transforme un entier en chaîne de caractères.
                        *
                        * @param i
                        * @return String of the integer i
                        */
                        private String IntToString(int i) {

                        return(i+"");

                        // if(i==1){return("1");}
                        // if(i==2){return("2");}
                        // if(i==3){return("3");}
                        // if(i==4){return("4");}
                        // if(i==5){return("5");}
                        // if(i==6){return("6");}
                        // if(i==7){return("7");}
                        // if(i==8){return("8");}
                        // if(i==9){return("9");}
                        // return("");

                        }

                        /**
                        * Transforme une chaîne de caractères en entier.
                        *
                        * @param string
                        * @return integer of the String string
                        */
                        private int StringToInt(String string) {

                        if(string.equalsIgnoreCase("")){
                        return(0);
                        }
                        else{
                        return(Integer.parseInt(string));
                        }

                        // return(Integer.parseInt(string));
                        // if(string.equalsIgnoreCase("1")){return(1);}
                        // if(string.equalsIgnoreCase("2")){return(2);}
                        // if(string.equalsIgnoreCase("3")){return(3);}
                        // if(string.equalsIgnoreCase("4")){return(4);}
                        // if(string.equalsIgnoreCase("5")){return(5);}
                        // if(string.equalsIgnoreCase("6")){return(6);}
                        // if(string.equalsIgnoreCase("7")){return(7);}
                        // if(string.equalsIgnoreCase("8")){return(8);}
                        // if(string.equalsIgnoreCase("9")){return(9);}
                        // return(0);

                        }

                        @SuppressWarnings("empty-statement")
                        private void SudokuTextSet(int i, String string) {
                        if(i==0){jTextField1.setText(string);};
                        if(i==1){jTextField2.setText(string);};
                        if(i==2){jTextField3.setText(string);};
                        if(i==3){jTextField4.setText(string);};
                        if(i==4){jTextField5.setText(string);};
                        if(i==5){jTextField6.setText(string);};
                        if(i==6){jTextField7.setText(string);};
                        if(i==7){jTextField8.setText(string);};
                        if(i==8){jTextField9.setText(string);};
                        if(i==9){jTextField10.setText(string);};
                        if(i==10){jTextField11.setText(string);};
                        if(i==11){jTextField12.setText(string);};
                        if(i==12){jTextField13.setText(string);};
                        if(i==13){jTextField14.setText(string);};
                        if(i==14){jTextField15.setText(string);};
                        if(i==15){jTextField16.setText(string);};
                        if(i==16){jTextField17.setText(string);};
                        if(i==17){jTextField18.setText(string);};
                        if(i==18){jTextField19.setText(string);};
                        if(i==19){jTextField20.setText(string);};
                        if(i==20){jTextField21.setText(string);};
                        if(i==21){jTextField22.setText(string);};
                        if(i==22){jTextField23.setText(string);};
                        if(i==23){jTextField24.setText(string);};
                        if(i==24){jTextField25.setText(string);};
                        if(i==25){jTextField26.setText(string);};
                        if(i==26){jTextField27.setText(string);};
                        if(i==27){jTextField28.setText(string);};
                        if(i==28){jTextField29.setText(string);};
                        if(i==29){jTextField30.setText(string);};
                        if(i==30){jTextField31.setText(string);};
                        if(i==31){jTextField32.setText(string);};
                        if(i==32){jTextField33.setText(string);};
                        if(i==33){jTextField34.setText(string);};
                        if(i==34){jTextField35.setText(string);};
                        if(i==35){jTextField36.setText(string);};
                        if(i==36){jTextField37.setText(string);};
                        if(i==37){jTextField38.setText(string);};
                        if(i==38){jTextField39.setText(string);};
                        if(i==39){jTextField40.setText(string);};
                        if(i==40){jTextField41.setText(string);};
                        if(i==41){jTextField42.setText(string);};
                        if(i==42){jTextField43.setText(string);};
                        if(i==43){jTextField44.setText(string);};
                        if(i==44){jTextField45.setText(string);};
                        if(i==45){jTextField46.setText(string);};
                        if(i==46){jTextField47.setText(string);};
                        if(i==47){jTextField48.setText(string);};
                        if(i==48){jTextField49.setText(string);};
                        if(i==49){jTextField50.setText(string);};
                        if(i==50){jTextField51.setText(string);};
                        if(i==51){jTextField52.setText(string);};
                        if(i==52){jTextField53.setText(string);};
                        if(i==53){jTextField54.setText(string);};
                        if(i==54){jTextField55.setText(string);};
                        if(i==55){jTextField56.setText(string);};
                        if(i==56){jTextField57.setText(string);};
                        if(i==57){jTextField58.setText(string);};
                        if(i==58){jTextField59.setText(string);};
                        if(i==59){jTextField60.setText(string);};
                        if(i==60){jTextField61.setText(string);};
                        if(i==61){jTextField62.setText(string);};
                        if(i==62){jTextField63.setText(string);};
                        if(i==63){jTextField64.setText(string);};
                        if(i==64){jTextField65.setText(string);};
                        if(i==65){jTextField66.setText(string);};
                        if(i==66){jTextField67.setText(string);};
                        if(i==67){jTextField68.setText(string);};
                        if(i==68){jTextField69.setText(string);};
                        if(i==69){jTextField70.setText(string);};
                        if(i==70){jTextField71.setText(string);};
                        if(i==71){jTextField72.setText(string);};
                        if(i==72){jTextField73.setText(string);};
                        if(i==73){jTextField74.setText(string);};
                        if(i==74){jTextField75.setText(string);};
                        if(i==75){jTextField76.setText(string);};
                        if(i==76){jTextField77.setText(string);};
                        if(i==77){jTextField78.setText(string);};
                        if(i==78){jTextField79.setText(string);};
                        if(i==79){jTextField80.setText(string);};
                        if(i==80){jTextField81.setText(string);};
                        }

                        @SuppressWarnings("empty-statement")
                        private String SudokuTextGet(int i) {
                        String string = "";
                        if(i==0){string = jTextField1.getText();};
                        if(i==1){string = jTextField2.getText();};
                        if(i==2){string = jTextField3.getText();};
                        if(i==3){string = jTextField4.getText();};
                        if(i==4){string = jTextField5.getText();};
                        if(i==5){string = jTextField6.getText();};
                        if(i==6){string = jTextField7.getText();};
                        if(i==7){string = jTextField8.getText();};
                        if(i==8){string = jTextField9.getText();};
                        if(i==9){string = jTextField10.getText();};
                        if(i==10){string = jTextField11.getText();};
                        if(i==11){string = jTextField12.getText();};
                        if(i==12){string = jTextField13.getText();};
                        if(i==13){string = jTextField14.getText();};
                        if(i==14){string = jTextField15.getText();};
                        if(i==15){string = jTextField16.getText();};
                        if(i==16){string = jTextField17.getText();};
                        if(i==17){string = jTextField18.getText();};
                        if(i==18){string = jTextField19.getText();};
                        if(i==19){string = jTextField20.getText();};
                        if(i==20){string = jTextField21.getText();};
                        if(i==21){string = jTextField22.getText();};
                        if(i==22){string = jTextField23.getText();};
                        if(i==23){string = jTextField24.getText();};
                        if(i==24){string = jTextField25.getText();};
                        if(i==25){string = jTextField26.getText();};
                        if(i==26){string = jTextField27.getText();};
                        if(i==27){string = jTextField28.getText();};
                        if(i==28){string = jTextField29.getText();};
                        if(i==29){string = jTextField30.getText();};
                        if(i==30){string = jTextField31.getText();};
                        if(i==31){string = jTextField32.getText();};
                        if(i==32){string = jTextField33.getText();};
                        if(i==33){string = jTextField34.getText();};
                        if(i==34){string = jTextField35.getText();};
                        if(i==35){string = jTextField36.getText();};
                        if(i==36){string = jTextField37.getText();};
                        if(i==37){string = jTextField38.getText();};
                        if(i==38){string = jTextField39.getText();};
                        if(i==39){string = jTextField40.getText();};
                        if(i==40){string = jTextField41.getText();};
                        if(i==41){string = jTextField42.getText();};
                        if(i==42){string = jTextField43.getText();};
                        if(i==43){string = jTextField44.getText();};
                        if(i==44){string = jTextField45.getText();};
                        if(i==45){string = jTextField46.getText();};
                        if(i==46){string = jTextField47.getText();};
                        if(i==47){string = jTextField48.getText();};
                        if(i==48){string = jTextField49.getText();};
                        if(i==49){string = jTextField50.getText();};
                        if(i==50){string = jTextField51.getText();};
                        if(i==51){string = jTextField52.getText();};
                        if(i==52){string = jTextField53.getText();};
                        if(i==53){string = jTextField54.getText();};
                        if(i==54){string = jTextField55.getText();};
                        if(i==55){string = jTextField56.getText();};
                        if(i==56){string = jTextField57.getText();};
                        if(i==57){string = jTextField58.getText();};
                        if(i==58){string = jTextField59.getText();};
                        if(i==59){string = jTextField60.getText();};
                        if(i==60){string = jTextField61.getText();};
                        if(i==61){string = jTextField62.getText();};
                        if(i==62){string = jTextField63.getText();};
                        if(i==63){string = jTextField64.getText();};
                        if(i==64){string = jTextField65.getText();};
                        if(i==65){string = jTextField66.getText();};
                        if(i==66){string = jTextField67.getText();};
                        if(i==67){string = jTextField68.getText();};
                        if(i==68){string = jTextField69.getText();};
                        if(i==69){string = jTextField70.getText();};
                        if(i==70){string = jTextField71.getText();};
                        if(i==71){string = jTextField72.getText();};
                        if(i==72){string = jTextField73.getText();};
                        if(i==73){string = jTextField74.getText();};
                        if(i==74){string = jTextField75.getText();};
                        if(i==75){string = jTextField76.getText();};
                        if(i==76){string = jTextField77.getText();};
                        if(i==77){string = jTextField78.getText();};
                        if(i==78){string = jTextField79.getText();};
                        if(i==79){string = jTextField80.getText();};
                        if(i==80){string = jTextField81.getText();};
                        return(string);
                        }

                        /** This method is called from within the constructor to
                        * initialize the form.
                        * WARNING: Do NOT modify this code. The content of this method is
                        * always regenerated by the Form Editor.
                        */
                        @SuppressWarnings("unchecked")
                        // <editor-fold defaultstate="collapsed" desc="Generated Code">
                        private void initComponents() {

                        mainPanel = new javax.swing.JPanel();
                        jTextField1 = new javax.swing.JTextField();
                        jTextField2 = new javax.swing.JTextField();
                        jTextField3 = new javax.swing.JTextField();
                        jTextField4 = new javax.swing.JTextField();
                        jTextField5 = new javax.swing.JTextField();
                        jTextField6 = new javax.swing.JTextField();
                        jTextField7 = new javax.swing.JTextField();
                        jTextField8 = new javax.swing.JTextField();
                        jTextField9 = new javax.swing.JTextField();
                        jTextField10 = new javax.swing.JTextField();
                        jTextField11 = new javax.swing.JTextField();
                        jTextField12 = new javax.swing.JTextField();
                        jTextField13 = new javax.swing.JTextField();
                        jTextField14 = new javax.swing.JTextField();
                        jTextField15 = new javax.swing.JTextField();
                        jTextField16 = new javax.swing.JTextField();
                        jTextField17 = new javax.swing.JTextField();
                        jTextField18 = new javax.swing.JTextField();
                        jTextField19 = new javax.swing.JTextField();
                        jTextField20 = new javax.swing.JTextField();
                        jTextField21 = new javax.swing.JTextField();
                        jTextField22 = new javax.swing.JTextField();
                        jTextField23 = new javax.swing.JTextField();
                        jTextField24 = new javax.swing.JTextField();
                        jTextField25 = new javax.swing.JTextField();
                        jTextField26 = new javax.swing.JTextField();
                        jTextField27 = new javax.swing.JTextField();
                        jTextField28 = new javax.swing.JTextField();
                        jTextField29 = new javax.swing.JTextField();
                        jTextField30 = new javax.swing.JTextField();
                        jTextField31 = new javax.swing.JTextField();
                        jTextField32 = new javax.swing.JTextField();
                        jTextField33 = new javax.swing.JTextField();
                        jTextField34 = new javax.swing.JTextField();
                        jTextField35 = new javax.swing.JTextField();
                        jTextField36 = new javax.swing.JTextField();
                        jTextField37 = new javax.swing.JTextField();
                        jTextField38 = new javax.swing.JTextField();
                        jTextField39 = new javax.swing.JTextField();
                        jTextField40 = new javax.swing.JTextField();
                        jTextField41 = new javax.swing.JTextField();
                        jTextField42 = new javax.swing.JTextField();
                        jTextField43 = new javax.swing.JTextField();
                        jTextField44 = new javax.swing.JTextField();
                        jTextField45 = new javax.swing.JTextField();
                        jTextField46 = new javax.swing.JTextField();
                        jTextField47 = new javax.swing.JTextField();
                        jTextField48 = new javax.swing.JTextField();
                        jTextField49 = new javax.swing.JTextField();
                        jTextField50 = new javax.swing.JTextField();
                        jTextField51 = new javax.swing.JTextField();
                        jTextField52 = new javax.swing.JTextField();
                        jTextField53 = new javax.swing.JTextField();
                        jTextField54 = new javax.swing.JTextField();
                        jTextField55 = new javax.swing.JTextField();
                        jTextField56 = new javax.swing.JTextField();
                        jTextField57 = new javax.swing.JTextField();
                        jTextField58 = new javax.swing.JTextField();
                        jTextField59 = new javax.swing.JTextField();
                        jTextField60 = new javax.swing.JTextField();
                        jTextField61 = new javax.swing.JTextField();
                        jTextField62 = new javax.swing.JTextField();
                        jTextField63 = new javax.swing.JTextField();
                        jTextField64 = new javax.swing.JTextField();
                        jTextField65 = new javax.swing.JTextField();
                        jTextField66 = new javax.swing.JTextField();
                        jTextField67 = new javax.swing.JTextField();
                        jTextField68 = new javax.swing.JTextField();
                        jTextField69 = new javax.swing.JTextField();
                        jTextField70 = new javax.swing.JTextField();
                        jTextField71 = new javax.swing.JTextField();
                        jTextField72 = new javax.swing.JTextField();
                        jTextField73 = new javax.swing.JTextField();
                        jTextField74 = new javax.swing.JTextField();
                        jTextField75 = new javax.swing.JTextField();
                        jTextField76 = new javax.swing.JTextField();
                        jTextField77 = new javax.swing.JTextField();
                        jTextField78 = new javax.swing.JTextField();
                        jTextField79 = new javax.swing.JTextField();
                        jTextField80 = new javax.swing.JTextField();
                        jTextField81 = new javax.swing.JTextField();
                        jButton1 = new javax.swing.JButton();
                        menuBar = new javax.swing.JMenuBar();
                        javax.swing.JMenu fileMenu = new javax.swing.JMenu();
                        newMenuItem = new javax.swing.JMenuItem();
                        openMenuItem = new javax.swing.JMenuItem();
                        saveMenuItem = new javax.swing.JMenuItem();
                        javax.swing.JMenuItem exitMenuItem = new javax.swing.JMenuItem();
                        javax.swing.JMenu helpMenu = new javax.swing.JMenu();
                        javax.swing.JMenuItem aboutMenuItem = new javax.swing.JMenuItem();
                        statusPanel = new javax.swing.JPanel();
                        javax.swing.JSeparator statusPanelSeparator = new javax.swing.JSeparator();
                        statusMessageLabel = new javax.swing.JLabel();
                        statusAnimationLabel = new javax.swing.JLabel();
                        progressBar = new javax.swing.JProgressBar();

                        mainPanel.setName("mainPanel"); // NOI18N

                        org.jdesktop.application.ResourceMap resourceMap = org.jdesktop.application.Application.getInstance(sudoku.SudokuApp.class).getContext().getResourceMap(SudokuView.class);
                        jTextField1.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField1.setName("jTextField1"); // NOI18N

                        jTextField2.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField2.setName("jTextField2"); // NOI18N

                        jTextField3.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField3.setName("jTextField3"); // NOI18N

                        jTextField4.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField4.setName("jTextField4"); // NOI18N

                        jTextField5.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField5.setName("jTextField5"); // NOI18N

                        jTextField6.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField6.setName("jTextField6"); // NOI18N

                        jTextField7.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField7.setName("jTextField7"); // NOI18N

                        jTextField8.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField8.setName("jTextField8"); // NOI18N

                        jTextField9.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField9.setName("jTextField9"); // NOI18N

                        jTextField10.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField10.setName("jTextField10"); // NOI18N

                        jTextField11.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField11.setName("jTextField11"); // NOI18N

                        jTextField12.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField12.setName("jTextField12"); // NOI18N

                        jTextField13.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField13.setName("jTextField13"); // NOI18N

                        jTextField14.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField14.setName("jTextField14"); // NOI18N

                        jTextField15.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField15.setName("jTextField15"); // NOI18N

                        jTextField16.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField16.setName("jTextField16"); // NOI18N

                        jTextField17.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField17.setName("jTextField17"); // NOI18N

                        jTextField18.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField18.setName("jTextField18"); // NOI18N

                        jTextField19.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField19.setName("jTextField19"); // NOI18N

                        jTextField20.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField20.setName("jTextField20"); // NOI18N

                        jTextField21.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField21.setName("jTextField21"); // NOI18N

                        jTextField22.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField22.setName("jTextField22"); // NOI18N

                        jTextField23.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField23.setName("jTextField23"); // NOI18N

                        jTextField24.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField24.setName("jTextField24"); // NOI18N

                        jTextField25.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField25.setName("jTextField25"); // NOI18N

                        jTextField26.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField26.setName("jTextField26"); // NOI18N

                        jTextField27.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField27.setName("jTextField27"); // NOI18N

                        jTextField28.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField28.setName("jTextField28"); // NOI18N

                        jTextField29.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField29.setName("jTextField29"); // NOI18N

                        jTextField30.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField30.setName("jTextField30"); // NOI18N

                        jTextField31.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField31.setName("jTextField31"); // NOI18N

                        jTextField32.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField32.setName("jTextField32"); // NOI18N

                        jTextField33.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField33.setName("jTextField33"); // NOI18N

                        jTextField34.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField34.setName("jTextField34"); // NOI18N

                        jTextField35.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField35.setName("jTextField35"); // NOI18N

                        jTextField36.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField36.setName("jTextField36"); // NOI18N

                        jTextField37.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField37.setName("jTextField37"); // NOI18N

                        jTextField38.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField38.setName("jTextField38"); // NOI18N

                        jTextField39.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField39.setName("jTextField39"); // NOI18N

                        jTextField40.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField40.setName("jTextField40"); // NOI18N

                        jTextField41.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField41.setName("jTextField41"); // NOI18N

                        jTextField42.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField42.setName("jTextField42"); // NOI18N

                        jTextField43.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField43.setName("jTextField43"); // NOI18N

                        jTextField44.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField44.setName("jTextField44"); // NOI18N

                        jTextField45.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField45.setName("jTextField45"); // NOI18N

                        jTextField46.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField46.setName("jTextField46"); // NOI18N

                        jTextField47.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField47.setName("jTextField47"); // NOI18N

                        jTextField48.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField48.setName("jTextField48"); // NOI18N

                        jTextField49.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField49.setName("jTextField49"); // NOI18N

                        jTextField50.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField50.setName("jTextField50"); // NOI18N

                        jTextField51.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField51.setName("jTextField51"); // NOI18N

                        jTextField52.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField52.setName("jTextField52"); // NOI18N

                        jTextField53.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField53.setName("jTextField53"); // NOI18N

                        jTextField54.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField54.setName("jTextField54"); // NOI18N

                        jTextField55.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField55.setName("jTextField55"); // NOI18N

                        jTextField56.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField56.setName("jTextField56"); // NOI18N

                        jTextField57.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField57.setName("jTextField57"); // NOI18N

                        jTextField58.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField58.setName("jTextField58"); // NOI18N

                        jTextField59.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField59.setName("jTextField59"); // NOI18N

                        jTextField60.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField60.setName("jTextField60"); // NOI18N

                        jTextField61.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField61.setName("jTextField61"); // NOI18N

                        jTextField62.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField62.setName("jTextField62"); // NOI18N

                        jTextField63.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField63.setName("jTextField63"); // NOI18N

                        jTextField64.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField64.setName("jTextField64"); // NOI18N

                        jTextField65.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField65.setName("jTextField65"); // NOI18N

                        jTextField66.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField66.setName("jTextField66"); // NOI18N

                        jTextField67.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField67.setName("jTextField67"); // NOI18N

                        jTextField68.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField68.setName("jTextField68"); // NOI18N

                        jTextField69.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField69.setName("jTextField69"); // NOI18N

                        jTextField70.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField70.setName("jTextField70"); // NOI18N

                        jTextField71.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField71.setName("jTextField71"); // NOI18N

                        jTextField72.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField72.setName("jTextField72"); // NOI18N

                        jTextField73.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField73.setName("jTextField73"); // NOI18N

                        jTextField74.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField74.setName("jTextField74"); // NOI18N

                        jTextField75.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField75.setName("jTextField75"); // NOI18N

                        jTextField76.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField76.setName("jTextField76"); // NOI18N

                        jTextField77.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField77.setName("jTextField77"); // NOI18N

                        jTextField78.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField78.setName("jTextField78"); // NOI18N

                        jTextField79.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField79.setName("jTextField79"); // NOI18N

                        jTextField80.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField80.setName("jTextField80"); // NOI18N

                        jTextField81.setText(resourceMap.getString("jTextField1.text")); // NOI18N
                        jTextField81.setName("jTextField81"); // NOI18N

                        javax.swing.ActionMap actionMap = org.jdesktop.application.Application.getInstance(sudoku.SudokuApp.class).getContext().getActionMap(SudokuView.class, this);
                        jButton1.setAction(actionMap.get("NextSudoku")); // NOI18N
                        jButton1.setText(resourceMap.getString("jButton1.text")); // NOI18N
                        jButton1.setName("jButton1"); // NOI18N

                        javax.swing.GroupLayout mainPanelLayout = new javax.swing.GroupLayout(mainPanel);
                        mainPanel.setLayout(mainPanelLayout);
                        mainPanelLayout.setHorizontalGroup(
                        mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addGroup(mainPanelLayout.createSequentialGroup()
                        .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addGroup(mainPanelLayout.createSequentialGroup()
                        .addGap(69, 69, 69)
                        .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addGroup(mainPanelLayout.createSequentialGroup()
                        .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addGroup(mainPanelLayout.createSequentialGroup()
                        .addComponent(jTextField73, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jTextField74, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jTextField75, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED))
                        .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, mainPanelLayout.createSequentialGroup()
                        .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                        .addComponent(jTextField64, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(jTextField55, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addComponent(jTextField56, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(jTextField65, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addComponent(jTextField57, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(jTextField66, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGap(10, 10, 10)))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, mainPanelLayout.createSequentialGroup()
                        .addComponent(jTextField58, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jTextField59, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jTextField60, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(10, 10, 10))
                        .addGroup(mainPanelLayout.createSequentialGroup()
                        .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                        .addGroup(javax.swing.GroupLayout.Alignment.LEADING, mainPanelLayout.createSequentialGroup()
                        .addComponent(jTextField76, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(jTextField77, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jTextField78, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGroup(javax.swing.GroupLayout.Alignment.LEADING, mainPanelLayout.createSequentialGroup()
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jTextField67, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jTextField68, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jTextField69, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)))
                        .addGap(10, 10, 10)))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addGroup(mainPanelLayout.createSequentialGroup()
                        .addComponent(jTextField79, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jTextField80, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jTextField81, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGroup(mainPanelLayout.createSequentialGroup()
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jTextField70, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jTextField71, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jTextField72, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGroup(mainPanelLayout.createSequentialGroup()
                        .addComponent(jTextField61, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jTextField62, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jTextField63, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE))))
                        .addGroup(mainPanelLayout.createSequentialGroup()
                        .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, mainPanelLayout.createSequentialGroup()
                        .addComponent(jTextField46, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jTextField47, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jTextField48, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(10, 10, 10))
                        .addGroup(mainPanelLayout.createSequentialGroup()
                        .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                        .addGroup(mainPanelLayout.createSequentialGroup()
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jTextField28, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jTextField29, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGroup(mainPanelLayout.createSequentialGroup()
                        .addComponent(jTextField37, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(jTextField38, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addComponent(jTextField39, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(jTextField30, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGap(10, 10, 10)))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, mainPanelLayout.createSequentialGroup()
                        .addComponent(jTextField49, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jTextField50, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jTextField51, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(10, 10, 10))
                        .addGroup(mainPanelLayout.createSequentialGroup()
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jTextField40, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jTextField41, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jTextField42, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)))
                        .addGroup(mainPanelLayout.createSequentialGroup()
                        .addComponent(jTextField31, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jTextField32, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jTextField33, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                        .addGroup(javax.swing.GroupLayout.Alignment.LEADING, mainPanelLayout.createSequentialGroup()
                        .addComponent(jTextField52, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jTextField53, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(jTextField54, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGroup(javax.swing.GroupLayout.Alignment.LEADING, mainPanelLayout.createSequentialGroup()
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jTextField43, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jTextField44, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jTextField45, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)))
                        .addGroup(mainPanelLayout.createSequentialGroup()
                        .addComponent(jTextField34, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jTextField35, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jTextField36, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE))))
                        .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                        .addGroup(mainPanelLayout.createSequentialGroup()
                        .addComponent(jTextField10, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jTextField11, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jTextField12, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGroup(mainPanelLayout.createSequentialGroup()
                        .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jTextField3, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)))
                        .addGroup(mainPanelLayout.createSequentialGroup()
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jTextField19, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jTextField20, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        1. avec en plus

                          *
                          * SudokuApp.java
                          */

                          package sudoku;

                          import org.jdesktop.application.Application;
                          import org.jdesktop.application.SingleFrameApplication;

                          /**
                          * The main class of the application.
                          */
                          public class SudokuApp extends SingleFrameApplication {

                          /**
                          * At startup create and show the main frame of the application.
                          */
                          @Override protected void startup() {
                          show(new SudokuView(this));
                          }

                          /**
                          * This method is to initialize the specified window by injecting resources.
                          * Windows shown in our application come fully initialized from the GUI
                          * builder, so this additional configuration is not needed.
                          */
                          @Override protected void configureWindow(java.awt.Window root) {
                          }

                          /**
                          * A convenient static getter for the application instance.
                          * @return the instance of SudokuApp
                          */
                          public static SudokuApp getApplication() {
                          return Application.getInstance(SudokuApp.class);
                          }

                          /**
                          * Main method launching the application.
                          */
                          public static void main(String[] args) {
                          launch(SudokuApp.class, args);
                          }
                          }
                          1. et,

                            /*
                            * SudokuAboutBox.java
                            */

                            package sudoku;

                            import org.jdesktop.application.Action;

                            public class SudokuAboutBox extends javax.swing.JDialog {

                            public SudokuAboutBox(java.awt.Frame parent) {
                            super(parent);
                            initComponents();
                            getRootPane().setDefaultButton(closeButton);
                            }

                            @Action public void closeAboutBox() {
                            setVisible(false);
                            }

                            /** This method is called from within the constructor to
                            * initialize the form.
                            * WARNING: Do NOT modify this code. The content of this method is
                            * always regenerated by the Form Editor.
                            */
                            // <editor-fold defaultstate="collapsed" desc="Generated Code">
                            private void initComponents() {

                            closeButton = new javax.swing.JButton();
                            javax.swing.JLabel appTitleLabel = new javax.swing.JLabel();
                            javax.swing.JLabel versionLabel = new javax.swing.JLabel();
                            javax.swing.JLabel appVersionLabel = new javax.swing.JLabel();
                            javax.swing.JLabel vendorLabel = new javax.swing.JLabel();
                            javax.swing.JLabel appVendorLabel = new javax.swing.JLabel();
                            javax.swing.JLabel homepageLabel = new javax.swing.JLabel();
                            javax.swing.JLabel appHomepageLabel = new javax.swing.JLabel();
                            javax.swing.JLabel appDescLabel = new javax.swing.JLabel();
                            javax.swing.JLabel imageLabel = new javax.swing.JLabel();

                            setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
                            org.jdesktop.application.ResourceMap resourceMap = org.jdesktop.application.Application.getInstance(sudoku.SudokuApp.class).getContext().getResourceMap(SudokuAboutBox.class);
                            setTitle(resourceMap.getString("title")); // NOI18N
                            setModal(true);
                            setName("aboutBox"); // NOI18N
                            setResizable(false);

                            javax.swing.ActionMap actionMap = org.jdesktop.application.Application.getInstance(sudoku.SudokuApp.class).getContext().getActionMap(SudokuAboutBox.class, this);
                            closeButton.setAction(actionMap.get("closeAboutBox")); // NOI18N
                            closeButton.setName("closeButton"); // NOI18N

                            appTitleLabel.setFont(appTitleLabel.getFont().deriveFont(appTitleLabel.getFont().getStyle() | java.awt.Font.BOLD, appTitleLabel.getFont().getSize()+4));
                            appTitleLabel.setText(resourceMap.getString("Application.title")); // NOI18N
                            appTitleLabel.setName("appTitleLabel"); // NOI18N

                            versionLabel.setFont(versionLabel.getFont().deriveFont(versionLabel.getFont().getStyle() | java.awt.Font.BOLD));
                            versionLabel.setText(resourceMap.getString("versionLabel.text")); // NOI18N
                            versionLabel.setName("versionLabel"); // NOI18N

                            appVersionLabel.setText(resourceMap.getString("Application.version")); // NOI18N
                            appVersionLabel.setName("appVersionLabel"); // NOI18N

                            vendorLabel.setFont(vendorLabel.getFont().deriveFont(vendorLabel.getFont().getStyle() | java.awt.Font.BOLD));
                            vendorLabel.setText(resourceMap.getString("vendorLabel.text")); // NOI18N
                            vendorLabel.setName("vendorLabel"); // NOI18N

                            appVendorLabel.setText(resourceMap.getString("Application.vendor")); // NOI18N
                            appVendorLabel.setName("appVendorLabel"); // NOI18N

                            homepageLabel.setFont(homepageLabel.getFont().deriveFont(homepageLabel.getFont().getStyle() | java.awt.Font.BOLD));
                            homepageLabel.setText(resourceMap.getString("homepageLabel.text")); // NOI18N
                            homepageLabel.setName("homepageLabel"); // NOI18N

                            appHomepageLabel.setText(resourceMap.getString("Application.homepage")); // NOI18N
                            appHomepageLabel.setName("appHomepageLabel"); // NOI18N

                            appDescLabel.setText(resourceMap.getString("appDescLabel.text")); // NOI18N
                            appDescLabel.setName("appDescLabel"); // NOI18N

                            imageLabel.setIcon(resourceMap.getIcon("imageLabel.icon")); // NOI18N
                            imageLabel.setName("imageLabel"); // NOI18N

                            javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
                            getContentPane().setLayout(layout);
                            layout.setHorizontalGroup(
                            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(layout.createSequentialGroup()
                            .addComponent(imageLabel)
                            .addGap(18, 18, 18)
                            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                            .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
                            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(versionLabel)
                            .addComponent(vendorLabel)
                            .addComponent(homepageLabel))
                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(appVersionLabel)
                            .addComponent(appVendorLabel)
                            .addComponent(appHomepageLabel)))
                            .addComponent(appTitleLabel, javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(appDescLabel, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 270, Short.MAX_VALUE)
                            .addComponent(closeButton))
                            .addContainerGap())
                            );
                            layout.setVerticalGroup(
                            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(imageLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 191, Short.MAX_VALUE)
                            .addGroup(layout.createSequentialGroup()
                            .addContainerGap()
                            .addComponent(appTitleLabel)
                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                            .addComponent(appDescLabel)
                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(versionLabel)
                            .addComponent(appVersionLabel))
                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(vendorLabel)
                            .addComponent(appVendorLabel))
                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(homepageLabel)
                            .addComponent(appHomepageLabel))
                            .addGap(33, 33, Short.MAX_VALUE)
                            .addComponent(closeButton)
                            .addContainerGap())
                            );

                            pack();
                            }// </editor-fold>

                            // Variables declaration - do not modify
                            private javax.swing.JButton closeButton;
                            // End of variables declaration

                            }
                            1. Les 3 .java constituent mon package Sudoku.
                              Le gros c'est créé tout seul ou de manière graphique.

                              J'espère que je ne vous ai pas noyé.
                              Je vous montre le projet en entier pour que vous puissiez l'executer chez vous pour comprendre le fonctionnement et m'aider à simplifier des parties non élégantes (horribles pour être franc) de mon code.
                              1. Merci Sandul,

                                Le code est mieux.
                                Par contre graphiquement, c'est un peu moche et il y a des options à rajouter : menu, bouton "next"...
                                1. Par contre graphiquement, c'est un peu moche <== Absolument d'accord avec toi. Je n'ai fait aucun effort pour rajouter quoi que ce soit autour (à part un bouton d'aide, pour montrer qu'on peut le faire avec une gestion totale de la part de l'IDE). Menu, toolbar, look and feel (par exemple Looks, gratuit et excellent ici: http://www.jgoodies.com/ ), tout ce que tu veux. Le but de mon code était de monter la création du tableau.

                                  ++
                              2. // Ici tu vas mettre tout le code nécessaire pour bien gérer la cellule qui vient d'être créée:
                                // Positionnement du texte (center), un seul caractère autorisé (chiffre de 0 à 9), éventuellement le font...
                                // Egalement un listener pour chaque cell, car probablement tu voudras modifier l'affichage
                                // dès qu'une mauvaise valeur est rentrée (genre changer la couleur et la dessiner en rouge)

                                Tu peux me montrer comment faire tout ça, STP.

                                Pour détecter une mauvaise valeur, j'ai déjà le code qui faut.
                                Par contre, changer la couleur en rouge, je sais pas.
                                Ca doit être un truc du genre object.setColors("red").
                                1. Menu, toolbar, look and feel (par exemple Looks, gratuit et excellent ici: http://www.jgoodies.com/ )

                                  c'est trop bien comme site pour le moment
                                  je veux du code plus petit donc plus facile à comprendre pour m'améliorer progréssivement

                                  Positionnement du texte (center), un seul caractère autorisé (chiffre de 0 à 9) ?