1

以下是我的代码:

JLabel label1 = new JLabel("testcontent");
label1.setBounds(131, 57, 205, 74);

frame.getContentPane().add(label1);

JButton btn1 = new JButton("run");
btn1.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {

    }
});

btn1.setBounds(169, 206, 117, 25);
frame.getContentPane().add(btn1);

当我尝试在 actionPerformed 中引用 label1 时,eclipse 找不到 label1。任何人都可以告诉我有什么问题吗?

4

2 回答 2

6

label1不在范围内ActionListener。将其声明为final或使其成为类实例变量

final JLabel label1 = new JLabel("testcontent");
于 2013-09-10T18:00:12.740 回答
1

您可以通过执行答案final中描述的操作来解决问题。

基本上,您通过在init创建匿名对象后立即调用的方法传入标签。在您的情况下,它看起来像这样:

btn1.addActionListener(new ActionListener() {
    private JLabel myLabel;
    private ActionListener init(JLabel var){
        myLabel = var;
        return this;
    }
    public void actionPerformed(ActionEvent e) {

    }
}.init(myVariable));

myLabel然后可以在btn1'sactionPerformed方法中访问该引用。

于 2013-09-10T18:21:41.140 回答