Как я могу передать переменную слушателю действия? - PullRequest
4 голосов
/ 21 марта 2010

У меня есть статическая переменная 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?

Ответы [ 3 ]

9 голосов
/ 21 марта 2010
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.

2 голосов
/ 21 марта 2010

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

1 голос
/ 09 декабря 2012
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);
        }
}
...