Como posso fornecer uma variável a um ouvinte de ação?
-
21-09-2019 - |
Pergunta
Eu tenho uma variável estática partner
na aula.E quero definir um valor para essas variáveis sempre que um botão de opção for pressionado.Este é o código que tentei usar:
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);
}
O problema aqui é que o actionPerformed
não vê a variável playerName
criado no loop.Como posso passar essa variável para o actionListener?
Solução
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);
}
Variáveis locais passadas para classes internas devem ser finais.Originalmente eu pensei que você não pode fazer playerName
final no loop for, mas na verdade você pode.Se não fosse esse o caso, você simplesmente armazenaria playerName
na variável final adicional (final String pn = playerName
) e usado pn
de actionPerformed
.
Outras dicas
A variável deve ser final para passá-lo para a classe interna.
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);
}
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow