2015-04-22 3 views
-2

Я пытаюсь удалить все объекты внутри wallsArrayList с для цикла, но я не могу заставить его работать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); 
} 

Это часть в Button_MouseListener отвечает за обработку "Reset" кнопку

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

Примечание: walls.clear(); также не работает, и я не получаю никаких ошибок. Он просто ничего не делает.

ответ

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, потому что на следующей итерации i будет увеличиваться.

Смежные вопросы