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)
         throws IllegalArgumentException {
      return getDescendantOfClass(clazz, container, property, value, true);
   }
public static <T extends JComponent> T getDescendantOfClass(Class<T> clazz,
         Container container, String property, Object value)
         throws IllegalArgumentException {
      return getDescendantOfClass(clazz, container, property, value, true);
   }
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.
<P>
This method invokes getDescendantOfClass(clazz, container, property,
value, true)

@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
@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