伪码如下:
  JPanel pane=new JPanel();
  pane.addMouseListener(new MouseListener(){
      public void mousePressed(MouseEvent e){
         ... ...
      }
      public void mouseClicked(MouseEvent e){
         ... ...
      }
      .
      .
      .
 
  });  MouseListener[] listener=pane.getMouseListeners();
  System.out.println(listener.length);  结果为 
  0
连刚添加进去的MouseListener都不能获得,这是怎么回事呀,向高手请教。

解决方案 »

  1.   

    我这里怎么运行结果都是 1
    请问楼主用的什么版本的 SDK ?
      

  2.   


    public EventListener[] getListeners(Class listenerType)      * @param listenerType the type of listeners requested; this parameter
         * should specify an interface that descends from
         *          java.util.EventListener
         * @return an array of all objects registered as 
         * Listeners on this component,
         *          or an empty array if no such
         * listeners have been added
      

  3.   

    For example, to get all of the MouseListeners for the given Component c, one would write: 
     MouseListener[] mls = (MouseListener[])(c.getListeners(MouseListener.class))
      

  4.   

    so, 
    MouseListener[] listener=pane.getMouseListeners();
    should be 
    MouseListener[] listener=(MouseListener[])(pane.getListeners(MouseListener.class))
      

  5.   

    我用的是JDK1.4, 这下更麻烦了,我单独写个这样的小测试程序运行结果是1,
    这个JPanel的面板是别人添加进去的,是不是他做了其他的一些设置导致了结果为0的这种情况的发生呀,用hpy121的方法得到的结果也是一样的,而且removeMouseListener()也不起作用,这到底是什么原因啊,郁闷中...  期待高手!
      

  6.   

    说来说去你就是不贴代码
    非要让别人帮你猜猜测1:
    别人帮你 remove 掉了
    猜测2:
    你的得到的 JPanel 是另外一个
      

  7.   

    兄弟,没办法贴呀,这块代码是写在原来软件的类库里的,只有.class文件,要不然我也不用这么费劲了。 你这两种猜测都不是,添加进去的鼠标监听器能够响应,而且是刚添加进去我就用getMouseListeners()来获得该MouseListener,结果得不到,反正尽碰到写这样的怪问题,算了,我还是重新添加一个面板吧,把原来的替换掉,不过这样就不能用他原来的功能了,过两天就结帖
      

  8.   

    他没准 override 了 getMouseListeners() 方法, 所以返回空数组如果他的 .class 没有经过混淆的话, 可以用 JAD(Java Advanced Decompiler) 反编译成 .java 文件, 而且基本不走样