繁体   English   中英

如何从主类访问侦听器中定义的变量?

[英]How to access a variable defined in a Listener from the main class?

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

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

有两件事情第一个是final变量必须当它宣布被初始化和final变量不能被重新分配的值。

不幸的是,您同时犯了两个错误。

另一个问题是您应该发布一个有效的代码。 它将使其他人容易发现问题。

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

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

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

nameLbl.setText("surname: " + result);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM