可以先理解一下this的含义。
--------------------------------------
第一种写法,this包含了所实现的接口中的东西;
第二种写法,对象包含了所实现的接口中的东西;

解决方案 »

  1.   

    你是初学者吗?我问的是这两种编写方式为什么不能颠倒一下?把第一个的jp1和this相互颠倒一下,为什么不能?jp1.addMouseListener(this);  this.addMouseListener(t1);
      

  2.   

    你看下面的代码:
    public class test7 extends JFrame implements MouseListener,KeyListener{ /**
     * @param args
     */
    JPanel jp1;
    public static void main(String[] args) {
    // TODO Auto-generated method stub
         test7 t1=new test7();
         
    }
       public test7()
       {    jp1=new JPanel();
           this.add(jp1);
           jp1.addMouseListener(this);
           jp1.addKeyListener(this);
       this.setSize(500,500);
    this.setLocation(300,150);
    this.setTitle("我的程序");
    this.setVisible(true);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE );
       
       }
    public void keyPressed(KeyEvent arg0) {
    // TODO Auto-generated method stub
    System.out.println(arg0.getKeyChar()+"键被按下");
    }
    public void mouseEntered(MouseEvent arg0) {
    // TODO Auto-generated method stub
    System.out.println("进入了窗体");
    }
    @Override
    public void mouseExited(MouseEvent arg0) {
    // TODO Auto-generated method stub
    System.out.println("离开了窗体");
    }
    }
    请问下,为什么运行这部分代码后,鼠标事件都能发生,为什么键盘按下的事件不能发生??代码没有问题,主类实现了键盘的监听接口和鼠标键盘的接口,但是在注册组件时候,是JPanel是事件发生者,窗体也就是主类本身是监听者,怎么鼠标事件能发生,而键盘的事件不能发生,是不是窗体本身没有键盘事件呢?
      

  3.   

    你是初学者吗?我问的是这两种编写方式为什么不能颠倒一下?把第一个的jp1和this相互颠倒一下,为什么不能?jp1.addMouseListener(this);  this.addMouseListener(t1);这个是不能颠倒的,jp1是需要添加鼠标事件的对象,而this是包含了监听器的对象。是要在jp1上添加监听器的,而不是要在监听器上添加被监听对象的。
      

  4.   

    你看下面的代码:
    public class test7 extends JFrame implements MouseListener,KeyListener{ /**
     * @param args
     */
    JPanel jp1;
    public static void main(String[] args) {
    // TODO Auto-generated method stub
         test7 t1=new test7();
         
    }
       public test7()
       {    jp1=new JPanel();
           this.add(jp1);
           jp1.addMouseListener(this);
           jp1.addKeyListener(this);
       this.setSize(500,500);
    this.setLocation(300,150);
    this.setTitle("我的程序");
    this.setVisible(true);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE );
       
       }
    public void keyPressed(KeyEvent arg0) {
    // TODO Auto-generated method stub
    System.out.println(arg0.getKeyChar()+"键被按下");
    }
    public void mouseEntered(MouseEvent arg0) {
    // TODO Auto-generated method stub
    System.out.println("进入了窗体");
    }
    @Override
    public void mouseExited(MouseEvent arg0) {
    // TODO Auto-generated method stub
    System.out.println("离开了窗体");
    }
    }
    请问下,为什么运行这部分代码后,鼠标事件都能发生,为什么键盘按下的事件不能发生??代码没有问题,主类实现了键盘的监听接口和鼠标键盘的接口,但是在注册组件时候,是JPanel是事件发生者,窗体也就是主类本身是监听者,怎么鼠标事件能发生,而键盘的事件不能发生,是不是窗体本身没有键盘事件呢?这里有一个以前就有人问过的贴子了,你看一下吧
    http://bbs.csdn.net/topics/330105242