Here you can find the source of focusComponentOrChild(Component c)
c
that can accept the focus.
public static Component focusComponentOrChild(Component c)
//package com.java2s; /**//from w w w. j a va2 s. co m * $RCSfile$ * $Revision: 128 $ * $Date: 2004-10-25 20:42:00 -0300 (Mon, 25 Oct 2004) $ * * Copyright (C) 2004-2008 Jive Software. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import java.awt.*; import javax.swing.*; public class Main { /** * Puts the focus on the first component in the tree of <code>c</code> that * can accept the focus. * * @see #getFocusableComponentOrChild */ public static Component focusComponentOrChild(Component c) { return focusComponentOrChild(c, false); } /** * Puts the focus on 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 focus 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 focused. * @see #getFocusableComponentOrChild */ public static Component focusComponentOrChild(Component c, boolean deepest) { final Component focusable = getFocusableComponentOrChild(c, deepest); if (focusable != null) { focusable.requestFocus(); } return focusable; } /** * 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. * @see #focusComponentOrChild */ 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; } }