if (! contains(x, y)) return null;
synchronized (getTreeLock ()) { if (! contains(x, y)) return null;
  public Component findComponentAt(int x, int y)  {    if (! contains(x, y))      return null;    for (int i = 0; i < ncomponents; ++i)      {        // Ignore invisible children...        if (!component[i].isVisible())          continue;        int x2 = x - component[i].x;        int y2 = y - component[i].y;        // We don't do the contains() check right away because        // findComponentAt would redundantly do it first thing.        if (component[i] instanceof Container)          {            Container k = (Container) component[i];            Component r = k.findComponentAt(x2, y2);            if (r != null)              return r;          }        else if (component[i].contains(x2, y2))          return component[i];      }    return this;  }