2013-04-23 4 views
2

J'ai le code suivant qui crée un tableau JButton sur un clic de bouton. Ope[] est déclaré publiquement en classe. J'ai un problème que j'ai un pointeur nul. C'est-à-dire qu'il n'imprime pas le 2ème en boucle c'est à dire. ne va pas dans l'itération intérieure. S'il vous plaît dites-moi comment gérer les auditeurs pour array. Merci d'avance.ajoutant des écouteurs au tableau JButton;

for(int i=0,y=30; i<counter;i++,y+=15) 
{ 

     open[i]=new JButton("Open"); 
     open[i].setBounds(380, y, 70, 15); 
     open[i].addActionListener(this); 
     panelDisplay.add (open[i]); 

     System.out.println(""+i); 
} 

La gestion des événements en fonction actionPerformed est la suivante:

for(int j=0; j<open.length; j++) 
{ 
    System.out.println("1st in a loop"+j); 

    if(ae.getSource() != null) 
    { 
     if(ae.getSource() == open[j]) 
     { 
      System.out.println("2nd in a loop" +j); 
      int id; 
      String stringid; 
      System.out.println("open of"+j+"is clicked"); 

      stringid = ""+table.getValueAt(j, 0); 
      id = Integer.parseInt(stringid); 
      fetchData(id); 
      //ae.getSource().equals(null); 
     } 
    } 

} 
+0

Ne pas utiliser 'setBounds()'. Utilisez un gestionnaire de disposition pour mettre en forme les boutons. Publiez votre SSCCE qui démontre le problème. – camickr

Répondre

0

DButton hérite méthode "setName" de composants. Donc, si vous définissez un nom sur le bouton lors de l'initialisation

 open[i]=new JButton("Open"); 
     open[i].setBounds(380, y, 70, 15); 
     open[i].setName("Button"+i); 
     open[i].addActionListener(this); 
     panelDisplay.add (open[i]); 

     System.out.println(""+i); 

vous trouverez le bouton Wich a été enfoncé dans le eventhandling

int buttonNumber = Integer.parseInt(ae.getSource().getName().replace("Button","")) 
    //... do eventhandling for Button["buttonNumber"] 
+1

Il vaudra mieux utiliser getName.equals ("Button" + i) – jogabonito

+0

-1, Il n'y a pas besoin de nous la méthode setName() pour quelque chose comme ça. C'est un travail supplémentaire qui n'est pas nécessaire. Si ce code fonctionne, alors le code original devrait fonctionner. Bien qu'il ne soit jamais recommandé d'utiliser if/else ou une logique de type looping pour déterminer quel objet a généré l'événement, si vous utilisez cette logique, vous devriez vérifier l'objet réel, ou peut-être la "commande d'action" de l'objet. nom de l'objet. – camickr

Questions connexes