Come posso dare una variabile per un listener di azione?
-
21-09-2019 - |
Domanda
Ho un partner
variabile statica nella classe. E voglio impostare un valore di queste variabili ogni volta che si preme un pulsante di scelta. Questo è il codice ho provato ad usare:
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);
}
Il problema qui è che il actionPerformed
non vede il playerName
variabile creata nel ciclo. Come posso passare questa variabile per l'ActionListener?
Soluzione
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);
}
Le variabili locali passati a classi interne devono essere definitiva. Inizialmente ho pensato che non si può fare playerName
finale nel ciclo for, ma in realtà si può. Se questo non era il caso, si dovrebbe semplicemente memorizzare playerName
in ulteriore variabile finale (final String pn = playerName
) e pn
utilizzato da actionPerformed
.
Altri suggerimenti
variabile deve essere finale per passare in 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);
}
}