如何将变量赋给动作侦听器?

时间:2010-03-21 17:37:59

标签: java variables visibility actionlistener

我在类中有一个静态变量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 个答案:

答案 0 :(得分:9)

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

传递给内部类的局部变量必须是最终的。最初我认为你不能在for循环中使playerName最终,但事实上你可以。如果不是这种情况,您只需将playerName存储在其他最终变量(final String pn = playerName)中,并使用pn中的actionPerformed

答案 1 :(得分:2)

变量必须 final 才能将其传递给内部类。

答案 2 :(得分:1)

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