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