Событие действия с переключателями в Java - (программа не работает)

Предполагается, что эта программа сохраняет значение кнопки "ab" в ArrayList при каждом нажатии кнопки, но команда if, кажется, никогда не работает, я попытался удалить ее и посмотреть, работает ли она, она работает, и ArrayList обновляется с новым значение. Так что, если я нажал кнопку или нет, когда она появляется в J Windows, ничего не происходит.

Эта программа позже сохраняет массив в файл, так что в основном ничего не сохраняется, если есть если и я нажал столько раз, сколько я хотел, но если цикл if в этом идет, то это работает

 public void actionPerformed(ActionEvent a) 
    {
        ArrayList<String> aList = new ArrayList<String>();
            if (a.getActionCommand() == "ab")
                aList.add("ab");
    }

Так что, если бы это было сделано, это распечатало бы мир, и aList был бы заполнен ab в нулевом индексе:

public void actionPerformed(ActionEvent a) 
{
         ArrayList<String> aList = new ArrayList<String>();
            aList.add("ab");
}

2 ответа

Ваш список существует только в рамках метода. Чтобы работать с ним извне, вы должны использовать его как переменную экземпляра.

Например:

public class A implements ActionListener {
    private final List<String> aList;

    public A() {
        aList = new ArrayList<String>();
    }

    ...

    public void actionPerformed(ActionEvent a) 
    {
        if (a.getActionCommand().equals("ab")) {
            aList.add("ab");
        }
    }
}

Во-первых, aList является локальной переменной, и он будет удален при выходе из метода.

Во-вторых:

a.getActionCommand() == "ab"

Вы должны сравнить String объекты, использующие equals метод:

a.getActionCommand().equals("ab")

или же

"ab".equals(a.getActionCommand()) //hack for prevention null reference after a.getActionCommand()

В вашем примере есть сравнение ссылок, но с использованием equals вы будете сравнивать объекты, а не ссылки.

Другие вопросы по тегам