如何在事件处理程序中迭代ArrayList?

时间:2015-04-17 03:36:03

标签: java javafx

假设您有一个按钮。在此按钮中,您有一个名为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?

2 个答案:

答案 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.
              }                

    });