假设您有一个按钮。在此按钮中,您有一个名为one
的ArrayList对象,该对象应该被迭代,以便在您单击按钮后显示所有值。我最初的尝试:
btnFrw.setOnAction(e ->{
Iterator<String> iterator = one.iterator();
while(iterator.hasNext()){
StringTokenizer st =
new StringTokenizer(iterator.next(),",");
txtID.setText(st.nextToken());
txtG.setText(st.nextToken());
txtBP.setText(st.nextToken());
txtD.setText(st.nextToken());
txtSP.setText(st.nextToken());
txtCons.setText(st.nextToken());
}
});
但当然这并不容易,而且在第一次点击时它会通过所有字符串到达最后一个。如何正确迭代List?
答案 0 :(得分:1)
在点击事件之外创建Iterator
:
Iterator<String> iterator = one.iterator();
然后,只需修改您的点击事件,即可if
使用while
代替hasNext()
:
btnFrw.setOnAction(e ->{
//Iterator<String> iterator = one.iterator();
//while(iterator.hasNext()){ //use if instead of while
if(iterator.hasNext()){
StringTokenizer st =
new StringTokenizer(iterator.next(),",");
txtID.setText(st.nextToken());
txtG.setText(st.nextToken());
txtBP.setText(st.nextToken());
txtD.setText(st.nextToken());
txtSP.setText(st.nextToken());
txtCons.setText(st.nextToken());
}
});
答案 1 :(得分:0)
如果我理解正确的话,你不会通过迭代按钮内的列表来改变每次点击的按钮数据(请纠正我)。
您的代码存在以下问题: 1.您正在使用while循环,因此您将始终最后一个元素而不是下一个元素。 2.即使你不使用循环,你仍然无法进入下一个元素,因为你没有保存状态(你当前的迭代)。
如何解决这个问题?
您需要保存状态,即迭代中当前位置的索引。 之后你可以这样做:
btnFrw.setOnAction(e ->{
if(one.size() <= currentIndex){
currentIndex++;
// Change text here.
}
});