如何从主类访问Listener中定义的变量?

时间:2013-09-11 15:40:08

标签: java swing global-variables

MyFrame类中的变量存在问题。我希望在MyFrame类中包含在组合框侦听器中定义的变量的值。

这是我的情况:我有一个朋友名字的组合框。我已经把一个听众放在组合框中,它必须返回所选朋友的姓氏。 我想在surname类的命令中插入MyFrame的值,但是存在一些问题:一旦将surname设置为final(因为它必须在听众),我有一个错误说:

The final local variable surname cannot be assigned, since it is defined in an enclosing type

问题是什么(或是)?在这里,我发布了我的代码:

public class MyFrame extends {
public static void main (String[] args)
    {
        //other 
        String [] names = {"john","al","jack"};
        final String surname=null;
        JLabel nameLbl = new JLabel("surname: " + surname);         
        JComboBox box = new JComboBox(names);    
        JPanel centralPnl = new JPanel();
        centralPnl.add(nameLbl);
        centralPnl.add(box);            
        box.addItemListener(new ItemListener()
        {
            @Override
            public void itemStateChanged(ItemEvent e) {                 
                if (e.getStateChange() == ItemEvent.SELECTED)
                { 
            // Here operations from database 
            //that return friends' surname under the variable name of "result"
                    surname = result;                       
                }
            }
        });
    }
}

3 个答案:

答案 0 :(得分:4)

您正在尝试重新分配final变量,这就是问题所在。 您的final变量也需要首先进行初始化。

答案 1 :(得分:1)

首先,有两件事是final变量在声明时必须初始化,final变量不能重新赋值。

不幸的是,你正在犯两个错误。

另一个问题是你应该发布有效代码;它会让其他人轻易找到问题。

答案 2 :(得分:1)

除了已经指出的代码问题之外,我想问题是你需要存储姓氏还是只是用它来更新标签?

如果您需要存储数据,请将姓氏变量移至班级。

如果您只是更新标签,请执行类似

的操作
nameLbl.setText("surname: " + result);