请看代码:for(h = 1;h < 15;h++){
   scanDocContentPane[h].addMouseListener(new MouseListener(){//panel数组
public void mouseClicked(MouseEvent e) {
   System.out.println("ASDS"+h);
TeleAScanPopFrame popFrame = new TeleAScanPopFrame();
        popFrame.showPopFrame(scanDocContentPane[h].getImagePath());//这两句可以暂时不管,当做一个操作就行了
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
}
});  
}
两个问题:1,当点击第四个Panel也就是scanDocContentPane[4]时,控制台输出ASDS15,并不是输出ASDS4,为什么?如何解决,2,为什么一定要写这些@Override语句

解决方案 »

  1.   

    @Override表示下面这个方法是重写的.
    如果你的方法体和父类的不一样,会报错.可以防止重写时写错.
      

  2.   

    你的这个h变量是类成员吧.你执行完循环添加了监听器,h的值为15.每次点击时执行System.out.println("ASDS"+h);当然是15了...
      

  3.   

    我现在想的是通过循环来设置这个监听程序,但是15现在是钉死了,以后可不一定,也就是这个数组的大小是不确定的,我需要添加scanDocContentPane[1],scanDocContentPane[2]一直到scanDocContentPane[scanDocContentPane.length]的监听程序。h只是一个循环变量。不知道说明白没有,我要是一个一个的写就不存在这种问题,但是现在就是需要用数组写,因为这个数组的大小是运行的时候才确定的,我也不知道会有多少,所以不能写死
      

  4.   

    不仅仅是输出ASDS15,就连操作也只操作最后一个的,点击所以的Panel都只操作最后一个的
      

  5.   

    换了一个方法
       for(h = 1;h < scanDocContentPane.length;h++){
    scanDocContentPane[h].addMouseListener(new ScanDocPaneListener());
    }class ScanDocPaneListener implements MouseListener{
    public void mouseClicked(MouseEvent e) {
      for(h = 1;h < scanDocContentPane.length;h++){
        if(scanDocContentPane[h].isFocusOwner()){
         System.out.println("Panel-"+h+"-onclick");
        }
       }
    }
    @Override
    public void mouseEntered(MouseEvent e) {
    }
    @Override
    public void mouseExited(MouseEvent e) {
    }
    @Override
    public void mousePressed(MouseEvent e) {
    }
    @Override
    public void mouseReleased(MouseEvent e) {
    }
    }
    然后这回连反应都没有,这是为什么?
      

  6.   

    调试了下,发现15个Panel的scanDocContentPane[h].isFocusOwner()都是FALSE,也就是说没办法区别出是哪一个被点击
      

  7.   

    感觉2楼说的挺对,你想想它执行过程:
    点击-调监听-执行print语句-输出“ASDS"+h,也就是h值是运行时才定的。
    你肯定把h做成了static放在外头了,h那个时候已经成15了,它运行当然输出15了。
    你可以给panel设个id嘛,直接输出对应id就好了