Как я могу передать переменную прослушивателю действий?
-
21-09-2019 - |
Вопрос
У меня есть статическая переменная partner
в классе.И я хочу устанавливать значение этой переменной при каждом нажатии переключателя.Это код, который я пытался использовать:
for (String playerName: players) {
option = new JRadioButton(playerName, false);
option.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent evt) {
partner = playerName;
}
});
partnerSelectionPanel.add(option);
group.add(option);
}
Проблема здесь в том, что actionPerformed
не видит переменную playerName
созданный в цикле.Как передать эту переменную в actionListener?
Решение
for (final String playerName: players) {
option = new JRadioButton(playerName, false);
option.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent evt) {
partner = playerName;
}
});
partnerSelectionPanel.add(option);
group.add(option);
}
Локальные переменные, передаваемые во внутренние классы, должны быть окончательными.Сначала я думал, что ты не можешь сделать playerName
Final в цикле for, но на самом деле можно.Если бы это было не так, вы бы просто сохранили playerName
в дополнительной конечной переменной (final String pn = playerName
) и использовал pn
от actionPerformed
.
Другие советы
Переменная должна быть финальный чтобы передать его во внутренний класс.
JButton button = new JButton("test");
button.addActionListiner(new ActionForButton("test1","test2"));
class ActionForButton implements ActionListener {
String arg,arg2;
ActionFroButton(String a,String b) {
arg = a; arg2 = b;
}
@Override
public void actionPerformed(ActionEvent e) {
Sustem.out.println(arg + "--" + arg2);
}
}