我有三个类,一个主类,一个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
}
}));
这样做的最大好处是,您无需检查谁是源,就可以立即知道源代码,然后在代码中知道处理程序需要执行的操作。