每当我点击下一个按钮时,它应该显示我的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(3次点击)
答案 0 :(得分:4)
对于每次单击,您创建一个新的ArrayList
,向其中添加3个元素,创建一个迭代器并通过迭代器从列表中获取第一个元素。
因此,您始终可以获得相同的输出。
为了在每次点击时获得不同的元素,您应该将ArrayList
和迭代器作为班级成员。
例如:
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次后,它将停止生成输出,因为迭代器将到达列表的末尾。
答案 1 :(得分: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());
}
}
});