Almacenar JTextField en un arreglo.
Buen dia colegas.
Mi experiencia con Java es poca por ello estoy intentando hacer una tarea pero no he tenido exito.
Tengo 3 JFrames dentro de cada uno hay de 10 a 20 JTextField.
En algunos eventos es necesario deshabilitar o habilitar todos los jTextField que componen los jFrames. Mediante una clase intente hacer un metodo para almacenar todos los jTextField en un arreglo para posteriormente con un iterador habilitar o deshabilitar con solo llamar a la clase.
Este es el ejemplo de mi intencion:
ArrayList lista = new ArrayList();
Iterator iterador = lista.listIterator();
public clNuevos() {
lista.add(jTextField1);
lista.add(jTextField2);
lista.add(jTextField3);
while(iterador.hasNext())
{
final JTextField j = (JTextField) iterador.next();
j.setEnabled(false);
}
}
Dicho codito me arroja ConcurrentModificationException.
Espero me puedan ayudar. Gracias
- Inicie sesión o regístrese para enviar comentarios
Obtén el iterador después de
Obtén el iterador después de haber agregado los elementos. Esa excepción sale porque se intenta recorrer un iterator cuando la lista fue modificada.
Esto deberia de funcionar
...
public void ClNuevos() {
lista.add( a );
lista.add( b );
lista.add( c );
Iterator i = lista.iterator(); //<-- creado después de haber agregado los elementos
while ( i.hasNext() ) {
JTextField tf = (JTextField)i.next();
tf.setEnabled( true );
}
}
Java tiene un for que te permite iterar los elementos de un Iterable ( clases que implementan esta interfaz, ve la documentación, ArrayList es una de ellas http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html )
Sería así
JTextField ft = ( JTextField ) o;
tf.setEnabled( true );
}
Internamente usa el iterator, solo que este código es más simple.
Mejor aún, en Java ( desde la version 4 ) se pueden especificar el tipo de dato que va almacenar tu lista ( se le conoce como generics ) :
...
for ( JTextfield tf : lista ) {
tf.setEnable( true );
}
Ya no es necesario hacer el cast, porque ya le dijiste que elementos va a usar la lista.
Espero que esto te sirva.