Code:
final class TraverseGrid{
  private final static int UP = 1;
  private final static int DOWN = 2;
  private final static int LEFT = 3;
  private final static int RIGHT = 4;

  private static Vector getAllFocusableComponents(Container cycleRoot){
    Vector components = new Vector();
    int iCtr;

    for (iCtr = 0; iCtr < cycleRoot.getComponentCount(); iCtr++) {
      if ((cycleRoot.getComponent(iCtr).isFocusable()) == true){
        components.addElement((Object)cycleRoot.getComponent(iCtr));
      }
    }
    return components;
  }

  private static Component mapComponent(Vector components, Component origin, int position){
    Component comp;
    Vector subset = new Vector();
    Vector row = new Vector();
    Point reference = origin.getLocation();
    int minimum = origin.getLocation().y;
    Component temp;
    int iCtr;
    for (iCtr = 0; iCtr < components.size(); iCtr++ ) {
      temp = (Component)components.elementAt(iCtr);
      if ((position == UP && origin.getLocation().y > temp.getLocation().y) ||
          (position == DOWN && origin.getLocation().y < temp.getLocation().y)) {
        if (minimum == origin.getLocation().y)
          minimum = temp.getLocation().y;
        else if ((position == UP && minimum < temp.getLocation().y)||
                 (position == DOWN && minimum > temp.getLocation().y))
          minimum = temp.getLocation().y;
        subset.addElement(temp);
      }
    }

    comp = origin;
    for (iCtr = 0; iCtr < subset.size(); iCtr++) {
      temp = (Component)subset.elementAt(iCtr);
      comp = temp;
      if (temp.getLocation().y == minimum &&  temp.getLocation().x >= origin.getLocation().x)
        break;
    }
    return comp;
  }

  private static Component getComponent(Vector components, Component theComponent, int iDirection){
    Component comp = theComponent;
    int iCtr;

    for (iCtr = 0; iCtr < components.size(); iCtr++) {
      if (theComponent.equals((Component)components.elementAt(iCtr)) == true){
        if (iDirection == RIGHT)
          iCtr++;
        else
          iCtr--;
        break;
      }
    }
    if (iCtr > -1 && iCtr < components.size())
      comp = (Component)components.elementAt(iCtr);
    return comp;
  }
  synchronized public static Component getAboveComponent(Container cycleRoot, Component origin){
    Vector comp = getAllFocusableComponents(cycleRoot);
    return mapComponent(comp, origin, UP);
  }
  synchronized static Component getBelowComponent(Container cycleRoot, Component origin){
    Vector comp = getAllFocusableComponents(cycleRoot);
    return mapComponent(comp, origin, DOWN);
  }
  synchronized static Component getNextComponent(Container container, Component origin){
    return getComponent(getAllFocusableComponents(container), origin, LEFT);
  }
  synchronized static Component getPreviousComponent(Container container, Component origin){
    return getComponent(getAllFocusableComponents(container), origin, RIGHT);
  }
}