请教高手,e.getsource(),究竟是得到e的哪个源呢?比如一个JFrame里有一个JPanel,而此JPanel里还有一个TextArea,但当我用e.getsource()的时候,三者都可能取到!这是何故?也就是说,包含在e的一个source里面的东西也都算这个e的source吗?JFrame f=new JFrame();
JPanel p=new JPanel();
JTextArea t=new JTextArea();p.add(t,BorderLayout.CENTER);
f.add(p,BORderLayout.CENTER);public getPan(ActionEvent e){
    JComponent o=(JComponent)e.getSource();
    if(e.getSource instanceof JFrame)    { System.out.println(o);
     }
     if(e.getSource instanceof JPanel)    { System.out.println(o);
     }
     if(e.getSource instanceof JTextArea)    { System.out.println(o);
     }  }这个可以是打印出多个source,求解释

解决方案 »

  1.   

    这个ActionEvent e没有确定是哪个组件,所以e.getSource可能截获所有组件的source。一般组件有自己的消息监听,只会获取该组件相关的source。
    而监听方式有两种:
    1)采用继承的方式这种方式的好处代码简洁,只需要关注需要监听的监听器消息以及消息处理函数。2)采用实现接口的方式这种方式需要实现监听器所监听的所有消息处理函数,代码比较繁琐,但是结构比较清晰。
      

  2.   

    getPan方法是怎么被调用的?
    一个event只有一个源,而且JFrame,JPanel,JTextArea本来就没有继承关系,所以在一次事件中该源不可能同时进入所有的if判断,发生一次事件,只可能进入其中一个if,也就是说,要么是JFrame发生该事件,要么是JPanel或JTextArea发生该事件,如果都发生该事件,那就相当于发生3次事件,分别3次调用该方法,每次调用方法的源只有一个
      

  3.   

    我觉得是这样的。
    比如你有一个button1,给它加了一个listener。那么在这个listener的方法中监听到的event的source都是这个button1。
    当然如果你把这个listener同时加到了button2上,那么当button2发生动作的时候,listener中方法的参数event的source就是button2。
      

  4.   

    这段代码有问题吧。
    一个JComponent的实例怎么可以是 JFrame。
    第一个if判断若为真、前面的强制转型就要出错。