Obtener controles

Tengo una inquietud y es la siguiente:
Como hago para obtener los controles que están un jpanel y almacenarlos en un array para posteriormente recorrerlos y limpiar sus valores, se que esto se puede lograr con un for each, pero no se como obtener los controles.
Respuesta

Funciona si le pones el índice a la variable "C" :

Component[] c = this.jPanel1.getComponents();/*obtengo los componentes*/
for (int i = 0; i < c.length; i++) {
if (c[i] instanceof JTextField) { /*si es un textfield*/
JTextField tf = (JTextField) c[i]; /*casteo*/
tf.setEnabled(true); /*habilito el control*/
}
}

1 respuesta más de otro experto

Respuesta
1
Pues muy fácil, existe un método que se llama getComponents, que devuelve un arreglo de componentes, entonces, este arreglo contiene los componentes que tiene el panel, seria de la siguiente manera
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
Component[] c = this.jPanel1.getComponents();/*obtengo los componentes*/
for (int i = 0; i < c.length; i++) {
if (c[0] instanceof JTextField) { /*si es un textfield*/
JTextField tf = (JTextField) c; /*casteo*/
tf.setText("" + i); /*muestro i en el textfield*/
}
}
}
De esta manera se maneja los componentes, si tienes 20 campos de texto no tendrás 20 lineas de código, sino que de una nomas los limpias a todos.
Hola, tengo una inquietud y es la siguiente:
Como hago para obtener los controles que están un jpanel y almacenarlos en un array para posteriormente recorrerlos y limpiar sus valores, se que esto se puede lograr con un for each, pero no se como obtener los controles, por su atención muchas gracias.
Saludos!
Hola, le cuento que puse el código pero no me funciona, debo aclarar que a cada JTexfield le he cambiado el nombre de la variable por txt y el nombre del control, no se si es por esto que tal vez no me funcione, a continuación le dejo el código:
package forms;
import dataBase.ConexionMySQL;
import java.awt.Component;
import java.lang.*;
import java.sql.*;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
public final class listin extends javax.swing.JFrame {
/** Creates new form listin */
public listin() {
initComponents();
inhabilitar();
}
//metodo para habilitar controles
void habilitar(){
/*txtApellido1.setEnabled(true);
txtApellido2.setEnabled(true);
txtNombre1.setEnabled(true);
txtNombre2.setEnabled(true);
txtNombre1.setEnabled(true);
txtIdentificacion.setEnabled(true);
txtTelefono.setEnabled(true);
txtApellido1.setText("");
txtApellido2.setText("");
txtNombre1.setText("");
txtNombre2.setText("");
txtNombre1.setText("");
txtIdentificacion.setText("");
txtTelefono.setText("");
txtApellido1.requestFocus();*/
Component[] c = this.jPanel1.getComponents();/*obtengo los componentes*/
for (int i = 0; i < c.length; i++) {
if (c[0] instanceof JTextField) { /*si es un textfield*/
JTextField tf = (JTextField) c; /*casteo*/
tf.setEnabled(true); /*habilito el control*/
}
}
}
Espero me puedas ayudar... gracias por su tiempo y colaboración.
¿Exactamente qué error te sale? Si estas poniendo los textfields junto con los lables te va a salir error porque el método getComponents(); devuelve todos los componentes, y si hay un label dentro del panel te va salir error en el casteo.
Por otro lado no debería darte ningún error, siempre y cuando tengas solo textfields dentro del jpanel.
¿Exactamente qué exception te sale y en que linea se encuentra?

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas