监听器(1)

一、基本概念

回顾概念:

Container类表示容器,继承了Component类。容器存放别的组件,有两种类型的容器:WindowPanel

  Window是不依赖于其他组件而独立存在的容器。Window有两个子类:FrameDialogFrame带有标题,可调整大小,Dialog可以移动,但是不能改变大小。

 

1.Awt JDK中提供AWTSwing两个包。

2.GUI组件可以分为两大类:基本组件个容器,分别是java.awt.Componentjava.awt.Container的直接或间接子类。

二、事件处理

事件:用户对组件的一个操作

事件源:发生事件的组件

事件处理器:某个java类中的负责处理事件的成员方法。

事件的分类:

1.按产生事件的物理操作和GUI自建的表现效果进行分类

  MouseEvent:包括鼠标按下,释放等

  WindowEvent:窗口最小化等等

  ActionEvent:对应不是具体动作是一种语义。

2.按事件的性质分类

  低级事件

  语义事件(又叫高级事件)

事件监听器

1.一个事件监听器对象负责处理一类事件

2.一类事件的每一种发生情况,分别由事件检同期对象中的一个方法来具体处理。

3.在事件源和事件监听器对象中进行的约定的接口类,被称为事件监听器接口。

4.事件监听器接口类的名称与事件类的名称是相对应的,例如:MouseEvent事件类的监听器接口名为MouseListener

5.处理发生在某个GUI组件上的XXXEvent接口的事件的某种情况,其事件处理的通用编写流程:

l        编写一个实现了XXXListener接口的事件监听器类;

l        XXXListener类中用于处理该事件情况的方法中,编写处理代码;

l        调用组件的addXXXListener方法,将类XXXListener创建的实例对象注册到GDI组件上。

 

 

 

package testframe;

import java.awt.Button;

import java.awt.Frame;

public class TestFrame {

       public static void main(String[] args) {

       Frame f=new Frame("ligang");

       f.add(new Button("按钮"));

       f.setSize(300,300);

       f.setVisible(true);

       f.addWindowListener(new WindowListener());//注册

       //f.dispose();

    }

}

 

 

package testframe;

import java.awt.Window;

import java.awt.event.WindowEvent;

public class WindowListener implements java.awt.event.WindowListener {

    public void windowActivated(WindowEvent e) {

       // TODO Auto-generated method stub

    }

    public void windowClosed(WindowEvent e) {

       // TODO Auto-generated method stub

    }

    public void windowClosing(WindowEvent e) {//关闭窗口

    //  e.getWindow().setVisible(false);//1)哪个窗口调用,并隐藏,隐藏不等于真正的关闭。

    //  e.getSource();得到事件源

       //((Window)e.getComponent()).dispose();//2~1)强制转换成window类型,部件//没有dispose()方法,dispose()方法是窗口专用的,比如frame

       // e.getWindow().dispose();//2disposewindow类中的方法。

              System.exit(0);   //3)结束程序

       /*我们可以方法结束或者直接用System.exit(0)结束程序*/

       /*getSource()方法 getComponent()方法和getWindow()方法*都是访问内存中的同一个对象只是返回的类型不一样,getWindow()是不需要强制类型转换,而其他的需要类型转换。*/

       /*一般步骤:先隐藏窗口,在关闭窗口,然后在退出程序。以上的3个步骤*/

    }

    public void windowDeactivated(WindowEvent e) {

       // TODO Auto-generated method stub

    }

    public void windowDeiconified(WindowEvent e) {

       // TODO Auto-generated method stub

    }

    public void windowIconified(WindowEvent e) {

       // TODO Auto-generated method stub

    }

    public void windowOpened(WindowEvent e) {

       // TODO Auto-generated method stub

    }

}

将窗口的监听器类注册到窗口上。

 

注意点:

部件没有dispose()方法,dispose()方法是窗口专用的,比如windowframe

我理解的过程:

1TextFrame类中有Frame类声明并实例化的f对象。

2f.addWindowListener(new WindowListener())//增加一个监听器【在Frame类中有从window类中继承过来的addWindowListener()方法】

3)在类WindowListener中实现public void windowClosing(WindowEvent e)方法。

4)编写方法体e.getWindow().dispose()WindowEvent类中有getWindow()方法,getWindow()返回的是Window类型的,因为Window类中有dispose()这个方法】

对于上述(4)还可以写成(Windowe.getComponent()).dispose()【此时需要强制类型转换,因为在WindowEvent类中有从java.awt.event. ComponenEvent继承过来的getCompinent()方法,给类方法返回的是一个Component类型的对象,因为在ComponentEvent类中没有dispose()这个方法,所以必须强制转换成Window方法才能调用dispose()方法。】

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值