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?

Foi útil?

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
scroll top