Pregunta

Para inicializar todos los JTextfField s en un JPanel cuando los usuarios hacen clic en un " borrar botón " ;, necesito recorrer el JPanel (en lugar de establecer todos los campos individuales en " ").

¿Cómo puedo usar un bucle for-each para iterar a través del JPanel en busca de JTextField s?

¿Fue útil?

Solución

for (Component c : pane.getComponents()) {
    if (c instanceof JTextField) { 
       ((JTextField)c).setText("");
    }
}

Pero si tiene JTextFields más profundamente anidados, podría usar la siguiente forma recursiva:

void clearTextFields(Container container) {
    for (Component c : container.getComponents()) {
        if (c instanceof JTextField) {
           ((JTextField)c).setText("");
        } else
        if (c instanceof Container) {
           clearTextFields((Container)c);
        }
    }
}

Editar: Una muestra para la sugerencia de Tom Hawtin - tackline sería tener una lista en su clase de marco:

List<JTextField> fieldsToClear = new LinkedList<JTextField>();

y cuando inicialice los campos de texto individuales, agréguelos a esta lista:

someField = new JTextField("Edit me");
{ fieldsToClear.add(someField); }

y cuando el usuario hace clic en el botón Borrar, simplemente:

for (JTextField tf : fieldsToClear) {
    tf.setText("");
}

Otros consejos

Si bien otra respuesta muestra una forma directa de resolver su problema, su pregunta implica una solución pobre.

Generalmente, las dependencias estáticas entre capas son unidireccionales. Debería pasar un paquete a través de getCommponents . Lanzar (suponiendo genéricos) es una forma fácil de ver que algo ha salido mal.

Por lo tanto, cuando cree los campos de texto para un formulario, agréguelos a la lista para borrarlos en una operación de limpieza, así como también agregarlos al panel. Por supuesto, en el código real, probablemente hay otras cosas que también quieres hacerles. En el código real, probablemente desee tratar con modelos (posiblemente Document ) en lugar de JComponent s.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top