¿Cómo obtener todos los elementos dentro de un JFrame?

Tengo este código para obtener todos los elementos que necesito y hacer algún procesamiento. El problema es que necesito especificar cada panel que tengo para obtener los elementos dentro de él.

for (Component c : panCrawling.getComponents()) { //processing } for (Component c : panFile.getComponents()) { //processing } for (Component c : panThread.getComponents()) { //processing } for (Component c : panLog.getComponents()) { //processing } //continue to all panels 

Quiero hacer algo como esto y obtener todos los elementos sin necesidad de especificar todos los nombres de los paneles. Como hago esto El código a continuación no obtiene todos los elementos.

 for (Component c : this.getComponents()) { //processing } 

Puede escribir un método recursivo y recurse en cada contenedor:

Este sitio proporciona algunos ejemplos de código:

 public static List getAllComponents(final Container c) { Component[] comps = c.getComponents(); List compList = new ArrayList(); for (Component comp : comps) { compList.add(comp); if (comp instanceof Container) compList.addAll(getAllComponents((Container) comp)); } return compList; } 

Si solo desea los componentes de los subcomponentes inmediatos, puede limitar la profundidad de recursión a 2.

Mira el documento de JFrame . Todo lo que coloca en un JFrame se coloca en un panel raíz contenido en el marco.

 for (Component c : this.getRootPane().getComponents()) 
  for (Component c : mainPanel.getComponents()) { for (Component sc : ((JPanel) c).getComponents()) { if (sc instanceof JTextField) { //process } } } 

en mi código, estoy obteniendo todas las instancias de jtextfield. puedes usar la misma lógica. este es solo un ejemplo de cómo obtener todos los subcomponentes de los componentes que ha tomado. Espero que te ayude.

Si quiere encontrar todos los componentes de un tipo dado, ¡puede usar este método recursivo!

 public static  List findComponents( final Container container, final Class componentType ) { return Stream.concat( Arrays.stream(container.getComponents()) .filter(componentType::isInstance) .map(componentType::cast), Arrays.stream(container.getComponents()) .filter(Container.class::isInstance) .map(Container.class::cast) .flatMap(c -> findComponents(c, componentType).stream()) ).collect(Collectors.toList()); } 

y puede usarse así:

 // list all components: findComponents(container, JComponent.class).stream().forEach(System.out::println); // list components that are buttons findComponents(container, JButton.class).stream().forEach(System.out::println);