Foros del Web » Programación para mayores de 30 ;) » Java »

Recoger valor JTextField

Estas en el tema de Recoger valor JTextField en el foro de Java en Foros del Web. Hola, Tengo un JDialog y dentro un JPanel con una serie de etiquetas y JTextField. El número de ellos varía en función del tamaño de ...
  #1 (permalink)  
Antiguo 25/06/2012, 02:54
 
Fecha de Ingreso: junio-2012
Mensajes: 10
Antigüedad: 11 años, 10 meses
Puntos: 0
Recoger valor JTextField

Hola,

Tengo un JDialog y dentro un JPanel con una serie de etiquetas y JTextField. El número de ellos varía en función del tamaño de una lista que se le pasa desde otra clase. Si la lista fuese de tamaño tres por ejemplo tendría 3 paneles cada uno de ellos con 1 etiqueta y un JTextField dentro.

He conseguido a través de un método crear el panel y el contenido que quiero que tenga, lo llamo tantas veces como sea el tamaño de la lista. También se muestran todos los paneles unos debajo de otros, cada etiqueta con su caja de texto correspondiente al lado. El título de las etiquetas no varía pero el valor que puedan tener las cajas de texto sí, ahí mi problema. No sé si existe alguna forma de asignar nombres distintos a las cajas de texto o si con el mismo nombre pero asignándole un atributo name puedo obtener el valor al hacer click en un botón.

También probé a crear los JTextField a través de un array y ahí asignárles un "name" pero cuando trato de hacer if(nombre.getName() == "nombre que había puesto" para guardarlo no falla pero me devuelve la cadena vacía.

He hecho búsquedas por el foro pero no he encontrado nada y en google también he buscado y tampoco, no soy demasiado buena buscando pero después de varias horas me he decidido a escribir.
Espero me podáis ayudar con código, orientación o si ya existe indicándome una url. Estoy desesperada ya porque lo veo imposible.

Un saludo y lo dicho espero me podáis ayudar. Gracias
  #2 (permalink)  
Antiguo 25/06/2012, 03:27
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Respuesta: Recoger valor JTextField

Hola:

Puedes meter los JTextField en un array y asignarles un name con setName().

Si te devuelven la cadena vacía, revisa como creas el array y asignas los nombres, algo debes estar haciendo mal. Pon el código de cómo lo haces si sigues teniendo problemas.

Las cadenas debes compararlas con equals() en vez de ==. Esto puede fallar if(nombre.getName() == "nombre", la forma correcta sería if ("nombre".equals(nombre.getName())).

Lo de poner "nombre".equals() en vez de nombre.getName().equals() es porque de la primera forma no tendrás problemas si nombre.getName() devolviera null. Hacerlo así es una práctica habitual en java.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 25/06/2012, 04:32
 
Fecha de Ingreso: junio-2012
Mensajes: 10
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: Recoger valor JTextField

Hola,
la comparación al ser cadenas la estoy haciendo con compareTo, perdón si puse == fue por escribir rápido.
El array de JTextField lo creo del tamaño de la lista y lo inicializo para cada JTextField con un nombre:
Código:
for(int i=0; i<txt.length; i++) {
	txtDescripcion = new JTextField();
	nombre = lista.get(i).toString();
	txtDescripcion.setName(nombre);
	txt[i] = txtDescripcion;
}
Después de esto hago una llamada al método que creará los paneles:
Código:
int contador = 0;
while(it.hasNext()) {
	nombreLista = it.next().toString();
	crearPanel(nombreLista, contador);
	contador++;
}
El código del método "crearPanel" sería:
Código:
public void crearPanel(String nombre, int contador) {
	panel = new JPanel();
	panel.setLayout(null);
	panelDescripciones.add(panel);
	
	lblDescr = new JLabel("Descripci\u00F3n:");
	lblDescr.setBounds(10, 23, 130, 14);
	panel.add(lblDescr);
	
	txtDescr = txt[contador];
	txtDescr.setBounds(150, 20, 400, 20);
	txtDescr.setColumns(10);
	panel.add(txtDescr);
}
Por último tengo otro método que se encarga de guardar los valores de las cajas de texto cuando se ejecuta el onClick del botón:
Código:
private void guardarTxt() {
	if(txtDescr.getName().compareTo(lista.get(0).toString()) == 0) {
		descripciones[0] = txtDescr.getText();
	}
}
Ese es todo el código que uso para generar los JTextField.
Un saludo
  #4 (permalink)  
Antiguo 25/06/2012, 04:37
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Respuesta: Recoger valor JTextField

En el último método .... ¿qué valor tiene txtDesc?.

Lo estás usando también en crearPanel y como no lo declaras en ninguno de los dos métodos tiene pinta de que es un atributo de la clase. Si no lo modificas en ningún sitio más aparte del código que muestras, tendrá siempre el valor del último elemento del array txt[] y su nombre será el último String de lista.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #5 (permalink)  
Antiguo 25/06/2012, 04:53
 
Fecha de Ingreso: junio-2012
Mensajes: 10
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: Recoger valor JTextField

Pero bueno qué eres adivino o qué? :D Yo nunca lo hubiera adivinado. Efectivamente como dices si imprimo el valor de txtDescr tiene el valor del último elemento de la lista. El JTextField como tal lo defino entre los atributos de la clase:
JTextField txtDescr; y luego en el método initialize() lo instancio con:
Código:
txtDescr = new JTextField();
Antes estuve haciendo cambios y me acabo de dar cuenta que puse mal el código del bucle for, el correcto sería este, que parecía que había dos JTextField:
Código:
for(int i=0; i<txt.length; i++) {
	txtDescr = new JTextField();
	nombre = lista.get(i).toString();
	txtDescr.setName(nombre);
	txt[i] = txtDescr;
}
Creí que instanciándolo por cada vez que lo voy a añadir al array sería suficiente. Cómo debería hacerlo. Gracias por tu ayuda
  #6 (permalink)  
Antiguo 25/06/2012, 05:00
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Respuesta: Recoger valor JTextField

No sé qué se supone que debe hacer guardarTxt() (de cual de los textfield debe recoger el name). En ese método, en vez de txtDesc usa el txt[i] siendo i el del textfield que quieras usar cuando llamas a ese método (igual tienes que pasarlo como parámetro o algo).

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #7 (permalink)  
Antiguo 25/06/2012, 05:14
 
Fecha de Ingreso: junio-2012
Mensajes: 10
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: Recoger valor JTextField

Pues mi intención es que para cada JTextField guarde su ".getText()" en una posición de un array.
Estoy usando
Código:
if(txtDescr.getName().compareTo(lista.get(i).toString()) == 0) {
en lugar de txt[i] porque quiero que lo compare con lo que hay en la página para luego recoger el valor y no lo que hay almacenado en el array de JTextField (txt[]). No sé si te he entendido bien o me he explicado yo.

Al guardarTxt pretendo que recorra todos los JTextField cuyo "name" coincida con el valor del ArrayList lista, que se supone debería ser el mismo ya que cuando creé txtDescr[] el "name" lo asigne según lo que hubiera en el ArrayList
Código:
for(int i=0; i<lista.size(); i++) {
	if(txtDescr.getName().compareTo(lista.get(i).toString()) == 0) {
		descripciones[i] = txtDescr.getText();
	}
}
Saludos
  #8 (permalink)  
Antiguo 25/06/2012, 06:20
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Respuesta: Recoger valor JTextField

Si pretendes en ese método que todos los txt[i] se metan en su correspondiente descripciones[i], no necesitas comparar con la lista de nombres para nada (de hecho, no necesitarías nombres).

Código java:
Ver original
  1. for(int i=0; i<lista.size(); i++) {
  2.    descripciones[i] = txt[i].getText();
  3. }

Esto mete cada txt[i] en su descripciones[i]. No sé si te he entendido bien...

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #9 (permalink)  
Antiguo 25/06/2012, 06:48
 
Fecha de Ingreso: junio-2012
Mensajes: 10
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: Recoger valor JTextField

Muchísimas gracias, con todos los bucles for y condicionales que estaba metiendo yo y con esa sola línea sí imprimó el valor de descripciones. Ya me sale cada valor en su posición.

Me había obcecado en que necesitaba conocer los nombres pero claro sabiendo que cada JTextField se guarda en una posición del array y como sé en qué orden los metí ya puedo almacenar su valor en la misma posición pero de otro array. Desconocía que se pudiera acceder a las propiedad del JTextField desde ese array en que los tengo almacenados. Creía que tendría que acceder comprobando sus propiedades, había probado con lo que me habías comentado en tu mensaje anterior, de cambiarlo txtDescr por el array pero está claro que estaba haciendo algo mal.

De verdad muchas gracias, me has ayudado con algo que llevaba atascada muchísimo tiempo y al final era una tontería. Desde luego que siempre viene bien alguien externo que mire el código desde otra perspectiva.

Ahora que ya tengo las descripciones en un array ya puedo trabajar con ellas para almacenarlas.

Gracias y saludos

Etiquetas: clase, jtextfield, recoger
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:01.