0

MyFrame我在课堂上的变量有问题。我想在MyFrame类中有一个在组合框侦听器中定义的变量的值。

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

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

3 回答 3

4

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

于 2013-09-11T15:41:58.843 回答
1

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

如果您需要存储数据,请将您的姓氏变量移动到类级别。

如果您只是更新标签,请执行以下操作

nameLbl.setText("surname: " + result);
于 2013-09-11T16:00:45.283 回答
1

有两件事,第一件事是final变量必须在声明时进行初始化,并且该final变量不能重新分配值。

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

另一个问题是您应该发布有效代码;会让别人很容易发现问题。

于 2013-09-11T15:44:40.553 回答