public static Component getFocusableComponentOrChild(Component c, boolean deepest) {
        if (c != null && c.isEnabled() && c.isVisible()) {
            if (c instanceof Container) {
                Container cont = (Container) c;

                if (deepest == false) { // first one is a good one
                    if (c instanceof JComponent) {
                        JComponent jc = (JComponent) c;
                        if (jc.isRequestFocusEnabled()) {
                            return jc;
                        }
                    }
                }

                int n = cont.getComponentCount();
                for (int i = 0; i < n; i++) {
                    Component child = cont.getComponent(i);
                    Component focused = getFocusableComponentOrChild(child, deepest);
                    if (focused != null) {
                        return focused;
                    }
                }

                if (c instanceof JComponent) {
                    if (deepest == true) {
                        JComponent jc = (JComponent) c;
                        if (jc.isRequestFocusEnabled()) {
                            return jc;
                        }
                    }
                } else {
                    return c;
                }
            }
        }

        return null;
    }
Returns the first component in the tree of <code>c</code> that can accept
the focus.

@param c       the root of the component hierarchy to search
@param deepest if <code>deepest</code> is true the method will return the first and deepest component that can accept the
               focus.  For example, if both a child and its parent are focusable and <code>deepest</code> is true, the child is
               returned.
@return the first component that can accept focus
@see #focusComponentOrChild
starter/src/main/java/org/jivesoftware/openfire/launcher/GraphicUtils.java