我有三个类,一个主类,一个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。感谢你的帮助。

最佳答案

因为您的handle_events类在另一个作用域中,所以它将永远找不到home_b变量。这就是很多人将匿名侦听器类用于事件处理程序的原因。

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


这样做的最大好处是,您无需检查谁是源,就可以立即知道源代码,然后在代码中知道处理程序需要执行的操作。

10-06 01:37