.
.
.
TEXT.addMouseListener(this);
.
.
.
.
.public void mousePressed(MouseEvent e) {    }.
.
.
.
上面这段代码中其中的addMouseListener()这个方法是从哪里继承过来的?还有那个参数e,Java是如何对其初始化的?

解决方案 »

  1.   

    TEXT肯定是一个JButton或者JTextFidld之类的组件,对吧?他们都继承于java.awt.Component,它保存那些符合 Serializable 协议的 AWT 侦听器。参数e是一个鼠标事件的实例啊。public void mousePressed(MouseEvent e)是你必须要实现的  因为你肯定实现了一个接口  而该接口需要你去实现这个抽象方法
      

  2.   

    我知道e是一个实例,但这里没有初始化阿..
    只是定义了MouseEvent e一般的不是药
    MouseEvent e=new MouseEvent()调用相应的构造函数来进行初始化的吗?
      

  3.   

    这不是你需要关注的。你写了这个方法,调用者会创建相应的对象,并把引用交给你的方法。当产生鼠标时间的时候,jvm会负责创建MouseEvent对象。
      

  4.   

    对于第一个问题,建议楼主查找一下api就会找到它继承自哪儿了。
    第二个问题,MouseEvent继承自java.awt.event.InputEventMouseEvent 对象被传递给每一个 MouseListener 或 MouseAdapter 对象,这些对象使用组件的 addMouseListener 方法注册,以接收“令人感兴趣”鼠标事件。(MouseAdapter 对象实现 MouseListener 接口。)所有此类侦听器对象都获得包含鼠标事件的 MouseEvent。 MouseEvent 对象还传递给每一个使用组件的 addMouseMotionListener 方法注册接收鼠标移动事件的 MouseMotionListener 或 MouseMotionAdapter 方法。(MouseMotionAdapter 对象实现 MouseMotionListener 接口。)所有此类侦听器对象都获得包含鼠标移动事件的 MouseEvent。
      

  5.   

    除非被重写了,否则是从java.awt.Component类继承。MouseEvent的创建和初始化,就比较复杂了,楼主如果感兴趣,可以去JDK的src中找到源代码。
      

  6.   

    对于第一个问题,建议楼主查找一下api就会找到它继承自哪儿了。
    第二个问题,MouseEvent继承自java.awt.event.InputEventMouseEvent 对象被传递给每一个 MouseListener 或 MouseAdapter 对象,这些对象使用组件的 addMouseListener 方法注册,以接收“令人感兴趣”鼠标事件。(MouseAdapter 对象实现 MouseListener 接口。)所有此类侦听器对象都获得包含鼠标事件的 MouseEvent。 MouseEvent 对象还传递给每一个使用组件的 addMouseMotionListener 方法注册接收鼠标移动事件的 MouseMotionListener 或 MouseMotionAdapter 方法。(MouseMotionAdapter 对象实现 MouseMotionListener 接口。)所有此类侦听器对象都获得包含鼠标移动事件的 MouseEvent。
      

  7.   

    对于参数e的创建问题(这样说不准确)不是用户关心的由java虚拟机内部处理
      

  8.   

    那个方法我找到了在componet里我现在还是比较关心那个e是怎么初始化的,源码我看过..
    还是理不出头绪他是怎么初始化的,郁闷死我了......................
      

  9.   

    这个要看jvm的代码了,去那一堆C++代码里找吧,很痛苦。
      

  10.   

    ....有哪位达人看过知道的吗?
    说下流程或者原理就OK...
    jvm源码是C++???
    JAVA真的是用C++写的?
    我最恨C++了..............
      

  11.   

    顺便说下,楼上你的duke头像没我的好看~
    哈哈哈哈
      

  12.   


    事实上,你所要理解的是public void mousePressed(MouseEvent e) 并非一般的函数。
    它不是由你调用的,而是由系统调用的。
    如果是一般的函数,比如你自己定义的:
    private void foo(int n);
    那么你调用的时候就是:
    int num=123;
    foo(num);
    这是对的。
    但是,对于函数mousePressed(MouseEvent e)来说,你是怎么调用它的?你根本没有亲自调用过它。
    你不可能这样做:
    MouseEvent event=new MouseEvent;
    mousePressed(event);
    因为这个函数是由系统调用的,就是说,当你点击了鼠标左键,系统就会产生一个鼠标事件,然后系统自动
    调用mousePressed(MouseEvent e)函数,并且把这个事件转换成一个MouseEvent类型的值传给函数。