在一个panel里面放上很多panel的时候,外围的监听不到鼠标事件!
请问如果解决?

解决方案 »

  1.   

    在里面的panel上把事件仍给上容器,就可以监听到的
      

  2.   

    确实,里层的控件会覆盖外层的控件所监听的事件,所以如果期望事件能够被外层容器所捕获,那么必须在内层控件中监听并在捕获事件后将其向外抛出。for example:private MouseMotionListener mml = new MouseMotionListener() {public void mouseMoved(MouseEvent e) {
      Component c = e.getComponent();
      
      if (IsInnerPanel(c)) {
        // throw out event
        e.translatePoint(c.getX(), c.getY());
      }
      else if (IsOutterPanel(c)) {
        // do something u want...
      }
    }// ... other methods
    }这里,如果判断出是内层PANEL捕获了事件(无论多深),就向上一层抛出此事件,c.getX() and c.getY(),是给出内层控件当前鼠标的坐标相对于外层控件的鼠标控件位置,这里仅仅假设了两层,事实上可以有无数层,且判断哪一层处理的逻辑也是可以相应作出调整。
    @.@||~
      

  3.   

    首先,我不是很清楚你为什么会在一个大面板里出现几百个小面板,是不是可以用其他设计方案代替?
    其次,我曾经有过这样的经历,确实会降低鼠标的响应速度,但是我的系统层层嵌套了3层PANEL,而事件发生在最外层,且每一层都包含很多的PANEL(总共大概6、70个),鼠标的响应事件还没有太离谱,你可以测试一下性能瓶颈可能出现的点,再确定解决方案
    @.@||~
      

  4.   

    构件实体对象。
    内层的每个Panel都看作一个对象,该对象内除了属性外增加一个监听方法监听鼠标。
      

  5.   

    呵呵,如果JAVA可以用WINDOWS API问题就好办了!!!