对象无法解析

时间:2010-03-09 02:56:01

标签: java listeners

我有这段代码:

public class Window extends JFrame {
public Window(){
    ...

    JButton button = new JButton("OK");
    getContentPane().add(button);

    ButtonHandler handler = new ButtonHandler();
    button.addActionListener(handler);
    ...
}

private class ButtonHandler implements ActionListener {

    public void actionPerformed(ActionEvent event){

        if (event.getSource() == button){ // <--- "button can not be resolved"
            System.out.println("Hello");

        }               
    }
}

我在Eclipse中遇到了这个错误。我刚刚在一本书中找到了一个(简化的)例子,不知道什么是错的。需要知识眼睛! :)

3 个答案:

答案 0 :(得分:3)

button个对象在课程ButtonHandler中不可见;它是Window构造函数的本地。您可以将其设为Window中的字段,或从ActionEvent中找出预期的命令。有关详情,请参阅tutorial

附录:例如

if ("OK".equals(event.getActionCommand())) { ...

答案 1 :(得分:2)

避免让ActionListener操作依赖于按下的按钮。如果对不同的按钮有不同的操作,则为每个操作定义一个单独的ActionListener。

这样你的听众就不需要检查按下了什么按钮。

public void actionPerformed(ActionEvent event){

    System.out.println("Hello");
}

答案 2 :(得分:1)

没有让按钮处理程序知道哪个按钮正在响应,但这会阻止您使用相同的对象。

创建一个新的构造函数,它将按钮对象作为键

//...
ButtonHandler handler = new ButtonHandler(button); 
//...

然后

private class ButtonHandler implements ActionListener { 
    private JButton button;

    ButtonHandler( JButton button) { this.button = button; }

    public void actionPerformed(ActionEvent event){   

    if (event.getSource() == button){ // <--- "button can not be resolved"   
        System.out.println("Hello");   

    }                  
}