Как я могу передать переменную прослушивателю действий?

StackOverflow https://stackoverflow.com/questions/2488006

Вопрос

У меня есть статическая переменная partner в классе.И я хочу устанавливать значение этой переменной при каждом нажатии переключателя.Это код, который я пытался использовать:

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

Проблема здесь в том, что actionPerformed не видит переменную playerName созданный в цикле.Как передать эту переменную в actionListener?

Это было полезно?

Решение

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

Локальные переменные, передаваемые во внутренние классы, должны быть окончательными.Сначала я думал, что ты не можешь сделать playerName Final в цикле for, но на самом деле можно.Если бы это было не так, вы бы просто сохранили playerName в дополнительной конечной переменной (final String pn = playerName) и использовал pn от actionPerformed.

Другие советы

Переменная должна быть финальный чтобы передать его во внутренний класс.

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);
        }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top