Java arraylist导航

时间:2012-01-06 09:17:03

标签: java user-interface button arraylist

请帮我纠正我的if语句。我试图浏览arraylist元素,但在某些情况下,next和previous按钮显示命令行错误。错误各不相同,但它们有以下共同点......

Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index....

继承人的代码

public class buttonListener implements ActionListener {
    public void actionPerformed(ActionEvent x){
        if (x.getSource() == nxtButton){
            indexCounter++;
            balanceFrame.setVisible(false);
            callDetail();

            if(indexCounter == filePaths.size()-1) { //max counter...we dont want to exceed the max number, size of array
                indexCounter = -1;
        }
    }
    else if (x.getSource() == prevButton){
        indexCounter--;
        balanceFrame.setVisible(false);
        callDetail();
        if(indexCounter == 0){
            indexCounter = filePaths.size()-1;
        }
    }
}}

2 个答案:

答案 0 :(得分:2)

您正在获取该异常,因为您正在递增/递减计数器,访问ArrayList,然后进行检查。

您需要做的是递增/递减计数器,进行检查,然后访问ArrayList。

ArrayLists有0个基于位置,因此您需要确保可能的最小位置为0,并且可能的最大位置比ArrayList中的项目数少一个。

你需要做的是这样的事情:

indexCounter++;
if (indexCounter > (filePaths.size - 1))
{
    indexCounter = filePaths.size - 1;
}
callDetail();

在你的第二部分

indexCounter--;
if (indexCounter < 0)
{
    indexCounter = 0;
}
callDetail();

如果他/她一直按下,则会导致用户继续查看最后一条记录,如果他/她继续按下,则会使用第一条记录。

在第二点,你似乎想要实现一个循环列表,所以这应该工作:

indexCounter++;
if (indexCounter > (filePaths.size - 1))
{
    indexCounter = 0;
}
callDetail();

在你的第二部分

indexCounter--;
if (indexCounter < 0)
{
    indexCounter = filePaths.size - 1;
}
callDetail();

答案 1 :(得分:1)

你的问题有点模糊,但我认为问题在于:

indexCounter = -1;

我认为你真正想要的是:

indexCounter -= 1; // indexCounter = indexCounter - 1

你的if条件似乎也错了。它应该是这样的:

if (indexCounter == filePaths.size()) {
    indexCounter -= 1; // indexCounter = indexCounter - 1
}

甚至更好:

if (indexCounter >= filePaths.size()) {
    indexCounter = filePaths.size() - 1;
}

另外,在旁注中,在Java中,惯例是使用CamelCase作为类名。因此,您的课程应该命名为ButtonListener,而不是buttonListener