Pregunta

Tengo un partner variable estática en la clase. Y quiero establecer un valor de estas variables siempre que se pulsa un botón de radio. Este es el código Traté de 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);
}

El problema aquí es que el actionPerformed no ve la variable playerName creada en el bucle. ¿Cómo puedo pasar esta variable al actionListener?

¿Fue útil?

Solución

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);
}

Las variables locales se pasan a las clases internas deben ser definitiva. Originalmente pensé que no se puede hacer playerName definitiva en el bucle, pero en realidad se puede. Por si no fuera el caso, sólo tendría que almacenar playerName en última variable adicional (final String pn = playerName) y pn usado de actionPerformed.

Otros consejos

Variable debe ser final para pasar en clase 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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top