Java的事件处理机制
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Java的事件处理机制
概念部分:
1.事件:Event
是一种消息对象,封装了与事件发生相关的信息,
如操作键盘会引发KeyEvent事件,
单击关闭按钮会引发WindowEvent事件,
单击命令按钮或选择菜单项目会引发ActionEvent事件
等等
2.事件源:Event Source
产生事件的对象,
如命令按钮和单选按钮都是事件源,单击他们时,会引发ActionEvent事件
单选按钮会产生ItemEvent事件。
3.事件监听器:Event Listener
在事件发生时,事件源负责给予通知的一种对象。接收到事件通知的监听器主动的对事件进行处理。
两件事:将自己注册给事件源;事件的处理
4.事件处理器Event Handler
事件处理方法,用来接受事件并处理事件的方法。
Java事件处理的步骤:
1.类实现相应的事件监听器接口
2.重写接口中抽象方法
3.给事件源注册事件监听器
【例题】关闭窗口的实现
public class NotepadDemo{
private Frame mainForm;
private MenuBar mb;
private Menu m1;
private Menu m2;
private MenuItem mExit;
private MenuItem mi1;
private MenuItem mi2;
private ExitHandler eh;
public NotepadDemo(){
mainForm = new Frame();
mb = new MenuBar();
m1 = new Menu("文件(F)");
m2 = new Menu("编辑(E)");
mi1 = new MenuItem("新建 Ctrl + N");
mi2 = new MenuItem("打开 Ctrl + O");
mExit = new MenuItem("退出(X)");
mainForm.setMenuBar(mb);
mb.add(m1);
mb.add(m2);
m1.add(mi1);
m1.add(mi2);
m1.add(mExit);
mainForm.setBounds(0, 0, 400, 300);
eh = new ExitHandler();
//注册事件监听器
mExit.addActionListener(eh);
mi1.addActionListener(eh);
mi2.addActionListener(eh);
//注册Form的关闭监听器
mainForm.addWindowListener(eh);
}
public void NotepadShow(){
mainForm.setVisible(true);
}
public static void main(String[] args) { NotepadDemo nd = new NotepadDemo();
nd.NotepadShow();
}
//实现事件监听器接口
class ExitHandler implements ActionListener,WindowListener{
//重写其中的抽象方法
public void actionPerformed(ActionEvent e) {
if(e.getSource()==mExit){
System.exit(0);
}
else if(e.getSource()==mi1){
System.out.println("新建按钮被按下");
}
else if(e.getSource()==mi2){
System.out.println("打开按钮被按下");
}
}
public void windowActivated(WindowEvent arg0) {
//激活窗口 P190
}
public void windowClosed(WindowEvent arg0) {
//窗口关闭时
}
public void windowClosing(WindowEvent arg0) {
//退出窗口
System.exit(0);
}
public void windowDeactivated(WindowEvent arg0) { //窗口非激活时
}
public void windowDeiconified(WindowEvent arg0) { //窗口非图标化时
}
public void windowIconified(WindowEvent arg0) {
//窗口图标化时
}
public void windowOpened(WindowEvent arg0) {
//窗口打开时
}
}
}
【练习】两个窗体,每个窗体上各有一个按钮,当点击此按钮时显示另外一个窗体
public class FrameChangeDemo {
public int n = 1;
Frame1 f1;
Frame2 f2;
public FrameChangeDemo(){
f1 = new Frame1();
f2 = new Frame2();
}
public static void main(String[] args) {
FrameChangeDemo fcd = new FrameChangeDemo();
}
class Frame1 extends Frame{
Button btn;
public Frame1(){
this.setBounds(0,0,400,300);
btn = new Button("显示窗体2");
btn.setBackground(Color.red);
btn.addActionListener(new BtnHandle());
this.add(btn);
this.setTitle("窗体1");
this.setVisible(true);
}
}
class Frame2 extends Frame{