Java ActionListener类找不到变量。

时间:2012-03-13 23:02:09

标签: java swing jbutton actionlistener

我有三个类,一个主类,一个GUI类,它使用awt + swing来创建一个带有4个按钮的基本窗口。

//BEGIN ADD ACTION LISTENERS
handle_events event_handler=new handle_events();
home_b.addActionListener(event_handler);
my_account_b.addActionListener(event_handler);
my_history_b.addActionListener(event_handler);
exit_b.addActionListener(event_handler);
//END ADD ACTION LISTENERS

我的handle_events类看起来像这样:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

class handle_events implements ActionListener
{
    public handle_events(){}

    public void actionPerformed(ActionEvent e) 
    {
        if(e.getSource==home_b) {do stuff;}
            //etc               
    }


}
//END EVENT HANDLER CLASS

问题是ActionListener类无法找到home_b,无论我做什么。谢谢你的帮助。

2 个答案:

答案 0 :(得分:3)

因为handle_events没有引用它。您可以在构造函数中添加对它的引用:

class handle_events implements ActionListener
{
    private Object home_b;

    public handle_events(Object home_b){
         this.home_b = home_b;
    }

    public void actionPerformed(ActionEvent e) 
    {
        if(e.getSource==home_b) {do stuff;}
            //etc               
    }
}

(使用home_b应该是的任何类型替换Object), 或者你可以将handle_events类转换为你拥有初始化那些动作监听器的代码的类中的嵌套类。

除非你有充分的理由这样做,否则你应该遵循常见的编码风格,并在开头用大写字母声明类名,而不是使用下划线:HandleEvents

答案 1 :(得分:1)

因为你的handle_events类在另一个范围内,所以它永远不会找到home_b变量。这就是很多人使用匿名监听器类来处理事件处理程序的原因。

JButton button = new JButton((new AbstractAction("name of button") {
public void actionPerformed(ActionEvent e) {
    //do stuff here
    }
}));

以这种方式执行此操作的最大好处是,您无需检查查看源是谁,您当时就知道它在那里以及处理程序需要执行的操作。