2016-10-05 15 views
0

次のボタンをクリックするたびに、私のarraylistの次の要素が表示されます。起こっていることではありません。最初の要素にとどまります。Arraylistの要素を1つずつ表示

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

出力を得る:AAA 期待出力:それぞれについて、(3回のクリック用)ABC

答えて

4

は、新しいArrayListを作成し、そこに3つの要素を追加し、イテレータを作成してから最初の要素を取得する]をクリックイテレータを介してリストします。 したがって、常に同じ出力が得られます。

クリックごとに異なる要素を取得するには、ArrayListとイテレータをクラスのメンバーとして保持する必要があります。例えば

:イテレータがリストの最後に到達しますので、ボタンを3回クリックした後、それは、出力を生成停止することを

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

注意。

+0

私はすぐにそれを取得します=)あなたの迅速な対応に感謝します! – Zcyan

0

actionPerformedメソッドが実行されるたびにリストと反復子を再作成します。しかし、同じイテレーター・インスタンスを再利用して、望ましい結果を達成する必要があります。たとえば、イテレータをフィールドとして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()); 
     } 
    } 
}); 
関連する問題