Partage
  • Partager sur Facebook
  • Partager sur Twitter

Déclarer des listeners dans une boucle

Pour un tableau de JTextField

Sujet résolu
    23 décembre 2009 à 0:49:08

    Bonjour,

    je souhaiterais déclarer ces listener via une boucle for (les variables en MAJ sont des int), y'a-t-il une solution ?

    Pour l'instant, si je boucle ce code, j'ai une demande de final sur i, donc le i++ n'est pas le bienvenue :s

    private void addFieldsListeners()
    	{
    		field[AVANCER].addKeyListener(new KeyAdapter() 
    		{  
    			public void keyPressed(KeyEvent e) {}			
    			public void keyReleased(KeyEvent e) 
    			{
    				boolean valid = true;
    
    				for(int j = 0; j < field.length; j++)
    				{
    					if(!((field[j].getText()).equals(null)) && AVANCER != j)
    					{
    						if(e.getKeyChar() == (field[j].getText()).charAt(0))
    						{
    							valid = false;
    						}
    					}
    				}
    				
    				if(!valid)
    					field[AVANCER].setText("");
    			}				   
    			public void keyTyped(KeyEvent e) {}
    		});
    		
    		field[RECULER].addKeyListener(new KeyAdapter() 
    		{  
    			public void keyPressed(KeyEvent e) {}			
    			public void keyReleased(KeyEvent e) 
    			{
    				boolean valid = true;
    
    				for(int j = 0; j < field.length; j++)
    				{
    					if(!((field[j].getText()).equals(null)) && RECULER != j)
    					{
    						if(e.getKeyChar() == (field[j].getText()).charAt(0))
    						{
    							valid = false;
    						}
    					}
    				}
    				
    				if(!valid)
    					field[RECULER].setText("");
    			}				   
    			public void keyTyped(KeyEvent e) {}
    		});
    		
    		field[DROITE].addKeyListener(new KeyAdapter() 
    		{  
    			public void keyPressed(KeyEvent e) {}			
    			public void keyReleased(KeyEvent e) 
    			{
    				boolean valid = true;
    
    				for(int j = 0; j < field.length; j++)
    				{
    					if(!((field[j].getText()).equals(null)) && DROITE != j)
    					{
    						if(e.getKeyChar() == (field[j].getText()).charAt(0))
    						{
    							valid = false;
    						}
    					}
    				}
    				
    				if(!valid)
    					field[DROITE].setText("");
    			}				   
    			public void keyTyped(KeyEvent e) {}
    		});
    		
    		field[GAUCHE].addKeyListener(new KeyAdapter() 
    		{  
    			public void keyPressed(KeyEvent e) {}			
    			public void keyReleased(KeyEvent e) 
    			{
    				boolean valid = true;
    
    				for(int j = 0; j < field.length; j++)
    				{
    					if(!((field[j].getText()).equals(null)) && GAUCHE != j)
    					{
    						if(e.getKeyChar() == (field[j].getText()).charAt(0))
    						{
    							valid = false;
    						}
    					}
    				}
    				
    				if(!valid)
    					field[GAUCHE].setText("");
    			}				   
    			public void keyTyped(KeyEvent e) {}
    		});
    		
    		field[ACC].addKeyListener(new KeyAdapter() 
    		{  
    			public void keyPressed(KeyEvent e) {}			
    			public void keyReleased(KeyEvent e) 
    			{
    				boolean valid = true;
    
    				for(int j = 0; j < field.length; j++)
    				{
    					if(!((field[j].getText()).equals(null)) && ACC != j)
    					{
    						if(e.getKeyChar() == (field[j].getText()).charAt(0))
    						{
    							valid = false;
    						}
    					}
    				}
    				
    				if(!valid)
    					field[ACC].setText("");
    			}				   
    			public void keyTyped(KeyEvent e) {}
    		});
    		
    
    		
    		
    	}
    


    Merci d'avance !
    • Partager sur Facebook
    • Partager sur Twitter
      23 décembre 2009 à 12:02:45

      Bon je sais pas du tout ce que tu veux faire mais un moyen de pouvoir accéder à une variable dans une inner class(ici les KeyAdapter), autre que la mettre en final et de la mettre en attribut de la class principal
      • Partager sur Facebook
      • Partager sur Twitter
        23 décembre 2009 à 13:18:49

        D'accord mais ça ne me permet pas de faire les déclaration dans une boucle.

        En gros je veux remplacer le code précédent par :

        private void addFieldsListeners()
        {
        	for(i = 0; i < field.length; i++)
        	{
        		field[i].addKeyListener(new KeyAdapter() 
        		{  
        			public void keyPressed(KeyEvent e) {}			
        			public void keyReleased(KeyEvent e) 
        			{
        				boolean valid = true;
        
        				for(int j = 0; j < field.length; j++)
        				{
        					if(!((field[j].getText()).equals(null)) && i != j)
        					{
        						if(e.getKeyChar() == (field[j].getText()).charAt(0))
        						{
        							valid = false;
        						}
        					}
        				}
        				
        				if(!valid)
        					field[i].setText("");
        			}				   
        			public void keyTyped(KeyEvent e) {}
        		});
        	}	
        }
        


        C'est un code qui permet que chaque JTextField ne puisse avoir comme valeur uniquement un caractère pas encore utilisé dans les autres JTextField.

        Merci
        • Partager sur Facebook
        • Partager sur Twitter
          23 décembre 2009 à 14:00:57

          Salut,

          Tu peux t'en sortir ici en utilisant le for-each.
          Ce devrait donner quelque chose comme :
          private void addFieldsListeners()
          {
              for(final Field f1 : field)
                  {
                      f1.addKeyListener(new KeyAdapter()
                          {
                              public void keyPressed(KeyEvent e) {}
                              public void keyReleased(KeyEvent e)
                              {
                                  boolean valid = true;
          
                                  for(Field f2 : field)
                                      {
                                          if(!f2.getText().equals(null) && f1 != f2)
                                              {
                                                  if(e.getKeyChar() == (f2.getText()).charAt(0))
                                                      {
                                                          valid = false;
                                                      }
                                              }
                                      }
          
                                  if(!valid)
                                      f1.setText("");
                              }
                              public void keyTyped(KeyEvent e) {}
                          });
                  }
          }
          


          Puis c'est plus joli =)
          • Partager sur Facebook
          • Partager sur Twitter
            23 décembre 2009 à 14:31:11

            Merci beaucoup, ça marche niquel !
            • Partager sur Facebook
            • Partager sur Twitter

            Déclarer des listeners dans une boucle

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown