那天有个新会员问了我事件监听的方法,他说他的JFrame实现了ActionListener接口,但是监听不到事件,感觉很奇怪.其实是他对swing的事件监听还不够了解.
实际上swing的事件监听机制是一中叫做观察者的设计模式,由观察者观察要监听的对象,如果观察到相应的事件发生,那么便调用相关的方法(在C++中称为回调函数)
由于swing帮我们把这个调用的过程都布置好了,所以我们只需要像做填空一样填写相应的方法就可以了.在java中有两种(还有一种已经过时,是早期的postEvent,就不计算在内了!呵呵!)方法可以给一个控件注册监听.把代码列下.很简单就不多讲了!
import javax.swing.*;
import java.awt.event.*;
public class SwingTrail extends JFrame{
JButton testButton ;
public SwingTrail(){
testButton = new JButton("Click");
this.getContentPane().add(testButton,"South");
// 填加事件响应的一种方法
// testButton.addActionListener(new ActionListener(){
// public void actionPerformed(ActionEvent e){
// JButton source = (JButton)e.getSource();
// source.setText("ok");
// }
// });
// 填加事件的另一种方法
ButtonAction action = new ButtonAction();
action.putValue(AbstractAction.NAME,"action");
testButton.setAction(action);
}
public static void main(String[]args){
JFrame f = new SwingTrail();
f.setSize(800,600);
f.setLocationRelativeTo(null);
f.setVisible(true);
}
}
class ButtonAction extends AbstractAction{
public void actionPerformed(ActionEvent e ){
System.out.println("clicked");
}
}