Comment puis-je donner une variable à un écouteur d'action?
-
21-09-2019 - |
Question
J'ai un partner
variable statique dans la classe. Et je veux définir une valeur de ces variables chaque fois qu'un bouton radio est pressé. Voici le code que j'ai essayé d'utiliser:
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);
}
Le problème ici est que le actionPerformed
ne voit pas la playerName
variable créée dans la boucle. Comment puis-je passer cette variable à la actionListener?
La solution
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);
}
Les variables locales passées aux classes internes doivent être définitifs. Au départ, je pensais que vous ne pouvez pas faire de finale playerName
dans la boucle, mais en fait vous pouvez. Si cela n'a pas été le cas, vous simplement stocker playerName
dans la variable finale supplémentaire (final String pn = playerName
) et pn
d'occasion à partir actionPerformed
.
Autres conseils
variable doit être finale pour passer en classe interne.
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);
}
}