2016-10-05 4 views
0

다음 버튼을 클릭 할 때마다 내 arraylist의 다음 요소가 표시되어야합니다. 그것은 일어나지 않습니다. 그것은 첫 번째 요소에 머물러 있습니다.Arraylist 요소 하나씩 표시

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 예상 출력 : ABC를 각각에 대해

답변

4

(3 클릭에 대한) 당신이 새로운 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()); 
     } 
    } 
});