ui/src/main/java/ucar/nc2/ui/util/SwingUtils.java
public static <T extends JComponent> T getDescendantOfClass(Class<T> clazz,
         Container container, String property, Object value, boolean nested)
         throws IllegalArgumentException {
      List<T> list = getDescendantsOfClass(clazz, container, nested);
      return getComponentFromList(clazz, list, property, value);
   }
public static <T extends JComponent> T getDescendantOfClass(Class<T> clazz,
         Container container, String property, Object value, boolean nested)
         throws IllegalArgumentException {
      List<T> list = getDescendantsOfClass(clazz, container, nested);
      return getComponentFromList(clazz, list, property, value);
   }
Convenience method that searches below <code>container</code> in the
component hierarchy in a depth first manner and returns the first
found component of class <code>clazz</code> having the bound property
value.
<P>
Returns {@code null} if such component cannot be found.

@param clazz the class of component to be found.
@param container the container at which to begin the search
@param property the className of the bound property, exactly as expressed
in the accessor e.g. "Text" for getText(), "Value" for getValue().
This parameter is case sensitive.
@param value the value of the bound property
@param nested true to include components nested within another listed
component, false otherwise
@return the component, or null if no such component exists in the
container's hierarchy
@throws IllegalArgumentException if the bound property does
not exist for the class or cannot be accessed