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?

È stato utile?

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);
        }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top