2016-10-05 2 views
0

Jedes Mal, wenn ich auf die Schaltfläche Next klickte, sollte das nächste Element meiner Arraylist angezeigt werden. Es ist nicht was passiert. Es bleibt beim ersten Element. ErhaltenAnzeige der Elemente von Arraylist eins nach dem anderen

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); 

Ausgang: AAA Erwartete Ausgabe: ABC (3 clicks)

Antwort

4

Für jeden Klick Sie eine neue ArrayList erstellen, fügen Sie 3 Elemente, erstellen einen Iterator und erhalten das erste Element aus der Liste über den Iterator. Dadurch erhalten Sie immer die gleiche Ausgabe.

Um bei jedem Klick ein anderes Element zu erhalten, sollten Sie Ihre ArrayList und Ihren Iterator als Mitglieder Ihrer Klasse behalten.

Zum Beispiel:

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()); 
      } 
     } 
    }); 
    ... 
} 

Beachten Sie, dass die Taste 3-mal klicken, wird es aufhören Ausgabe erzeugt, da der Iterator das Ende der Liste erreichen.

+0

ich es jetzt =) Vielen Dank für Ihre prompte Antwort! – Zcyan

0

Sie erstellen die Liste und den Iterator jedes Mal erneut, wenn die Methode actionPerformed ausgeführt wird. Sie müssen die gleiche Iterator-Instanz jedoch erneut verwenden, um das gewünschte Ergebnis zu erzielen. Sie könnten z.B. Speichern der Iterator als Feld in der 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()); 
     } 
    } 
}); 
Verwandte Themen