一个一个显示Arraylist的元素

Displaying elements of Arraylist one by one

每次我单击下一步按钮时,它应该显示我的数组列表的下一个元素。这不是正在发生的事情。它停留在第一个元素。

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(3 次点击)

每次点击都会创建一个新的 ArrayList,向其中添加 3 个元素,创建迭代器并通过迭代器从列表中获取第一个元素。 因此你总是得到相同的输出。

为了在每次点击时获得不同的元素,您应该将 ArrayList 和迭代器保留为 class 的成员。

例如:

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

请注意,点击按钮 3 次后,它将停止产生输出,因为迭代器将到达列表的末尾。

每次执行 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());
        }
    }
});