ArrayList删除不起作用

时间:2015-04-22 15:17:26

标签: java arraylist

我正在尝试使用for循环删除walls ArrayList中的所有对象,但我无法使其正常工作

public void initializeButtons(){
    JButton save_button = new JButton("Save");
    save_button.addMouseListener(new Button_MouseListener(save_button));
    save_button.setBounds(1300, 50, 75, 50);
    add(save_button);

    JButton load_button = new JButton("Load");
    save_button.addMouseListener(new Button_MouseListener(load_button));
    load_button.setBounds(1300, 125, 75, 50);
    add(load_button);

    JButton reset_button = new JButton("Reset");
    save_button.addMouseListener(new Button_MouseListener(reset_button));
    reset_button.setBounds(1300, 200, 75, 50);
    add(reset_button);
}

这是[{1}}负责处理Button_MouseListener按钮

的一部分
"Reset"

注意: if (button.getText().equals("Reset")) { for (int i = 0; i < walls.size(); i++) { walls.remove(((int)i)); } repaint(); } 也不起作用,我没有收到任何错误。它什么也没做。

1 个答案:

答案 0 :(得分:7)

看起来像复制粘贴错误。复制时

JButton save_button = new JButton("Save");
save_button.addMouseListener(new Button_MouseListener(save_button));
save_button.setBounds(1300, 50, 75, 50);
add(save_button);

您仅在声明

中更改了引用的名称
JButton load_button = new JButton("Load");

但忘记在下面的行中更改

save_button.addMouseListener(new Button_MouseListener(load_button));

这意味着您仍然只向save_button添加一个侦听器,而不是load_button

同样的事情发生在reset_button上,这意味着代码

if (button.getText().equals("Reset")) {
    for (int i = 0; i < walls.size(); i++) {
        walls.remove(((int)i));
    }
    repaint();
}

永远不会被此按钮执行。

顺便说一下,这个循环毫无意义。如果您想要清除List,请拨打clear()方法。

walls.clear();

你的循环无法正常工作的原因(即使你修复了侦听器问题)是walls.remove(i)删除i'元素并使前i+1元素成为新的i'元素(它会移动i左后的所有元素),这意味着您永远不会删除位置i处的新元素,因为在下一次迭代中{{1将增加。