2016-10-05 2 views
0

Chaque fois que je cliquais sur le bouton suivant, il devait afficher l'élément suivant de mon arraylist. Ce n'est pas ce qui se passe. Il reste au premier élément.Affichage des éléments d'Arraylist un par un

JButton btnNext = new JButton("Next"); 
    btnNext.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent arg0) { 
      ArrayList numbers = new ArrayList(); 
      numbers.add("A"); 
      numbers.add("B"); 
      numbers.add("C");     
      ListIterator litr = numbers.listIterator();    
       if (litr.hasNext()) {     
       System.out.print(litr.next()); 
       } 


     } 
    }); 
    btnNext.setBounds(71, 167, 89, 23); 
    contentPane.add(btnNext); 

Pour obtenir une sortie: AAA Sortie prévue: ABC (pour 3 clics)

Répondre

4

Pour chaque clic, vous créez un nouveau ArrayList, ajouter 3 éléments, créez un itérateur et obtenir le premier élément de la liste via l'itérateur. Par conséquent, vous obtenez toujours la même sortie.

Afin d'obtenir un élément différent sur chaque clic, vous devez garder votre ArrayList et votre iterator en tant que membres de votre classe.

Par exemple:

public class YourClass 
{ 
    private List<String> numbers; 
    private ListIterator<String> litr; 

    public YourClass() { 
     numbers = new ArrayList<>(); 
     numbers.add("A"); 
     numbers.add("B"); 
     numbers.add("C");     
     litr = numbers.listIterator(); 
    } 

    ... 
    btnNext.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent arg0) {    
      if (litr.hasNext()) {     
       System.out.print(litr.next()); 
      } 
     } 
    }); 
    ... 
} 

Notez que après avoir cliqué sur le bouton 3 fois, il cessera de produire une sortie, puisque le iterator atteindra la fin de votre liste.

+0

Je reçois maintenant =) Merci pour votre réponse rapide! – Zcyan

0

Vous recréer la liste et l'itérateur chaque fois que la méthode actionPerformed est exécutée. Vous devez cependant réutiliser la même instance d'itérateur pour obtenir le résultat souhaité. Vous pourriez, par exemple, stocker le iterator comme champ dans la ActionListener:

btnNext.addActionListener(new ActionListener() { 

    private final ListIterator litr; 

    { 
     ArrayList numbers = new ArrayList(); 
     numbers.add("A"); 
     numbers.add("B"); 
     numbers.add("C"); 
     this.litr = numbers.listIterator(); 
    } 

    public void actionPerformed(ActionEvent arg0) {   
     if (litr.hasNext()) {     
      System.out.print(litr.next()); 
     } 
    } 
});