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

[SOLUCIONADO] Cargar string de una columna y pasarla a varios jtextfield

Estas en el tema de Cargar string de una columna y pasarla a varios jtextfield en el foro de Java en Foros del Web. Hola, resulta que tengo un Jtable con las siguientes columnas "Cedula", "Nombre", "Apellido", "Edad", "Sexo", "Telefono", "Direccion", "Cargo" Resulta que en el evento->mouse->mouseclicked hago que ...
  #1 (permalink)  
Antiguo 29/07/2013, 14:54
Avatar de drakk92  
Fecha de Ingreso: julio-2013
Ubicación: cali
Mensajes: 25
Antigüedad: 11 años, 3 meses
Puntos: 1
Pregunta Cargar string de una columna y pasarla a varios jtextfield

Hola, resulta que tengo un Jtable con las siguientes columnas

"Cedula", "Nombre", "Apellido", "Edad", "Sexo", "Telefono", "Direccion", "Cargo"

Resulta que en el evento->mouse->mouseclicked hago que al seleccionar una fila todas los valores en las columnas de esa fila se carguen en unos jtextfield que tengo.

Código:
for (int i = 0; i < t_datos.getRowCount(); i++) {
            String nombre = "", apellido = "", num2 = "", direccion = "", dir = "", calle = "", telefono = "", edad = "", sexo = "", cedula = "", cargo = "", num1 = "", letra = "";

            cedula = (String) t_datos.getValueAt(t_datos.getSelectedRow(), 0);
            nombre = (String) t_datos.getValueAt(t_datos.getSelectedRow(), 1);
            apellido = (String) t_datos.getValueAt(t_datos.getSelectedRow(), 2);
            edad = (String) t_datos.getValueAt(t_datos.getSelectedRow(), 3);
            sexo = (String) t_datos.getValueAt(t_datos.getSelectedRow(), 4);
            telefono = (String) t_datos.getValueAt(t_datos.getSelectedRow(), 5);
            direccion = (String) t_datos.getValueAt(t_datos.getSelectedRow(), 6);
            cargo = (String) t_datos.getValueAt(t_datos.getSelectedRow(), 7);

t_ce.setText(cedula);
            t_n.setText(nombre);
            t_a.setText(apellido);
            t_e.setText(edad);
            combosex.setSelectedItem(sexo);
            t_telefono.setText(telefono);
            t_dir.setSelectedItem(direccion);           
            t_ca.setText(cargo);
todo bien.


pero resulta que en la columba direccion tengo un string amplio ejemplo

"carrera 50 # 14 b - 87"

lo que quiero hacer es que cada string/int los ponga en unos jtextfield que tengo.

a mi se me ocurrio hacerle un split al string poner cada valor en un arreglo y de ese arreglo pasarlos a los jtextfield, pero me tira error en la parte de "Direccion" la cual es la que quiero particionarla y mandar cada valor a los jtextfield y combobox correspondientes.

Código:
for (int i = 0; i < t_datos.getRowCount(); i++) {
            String nombre = "", apellido = "", num2 = "", direccion = "", dir = "", calle = "", telefono = "", edad = "", sexo = "", cedula = "", cargo = "", num1 = "", letra = "";

            cedula = (String) t_datos.getValueAt(t_datos.getSelectedRow(), 0);
            nombre = (String) t_datos.getValueAt(t_datos.getSelectedRow(), 1);
            apellido = (String) t_datos.getValueAt(t_datos.getSelectedRow(), 2);
            edad = (String) t_datos.getValueAt(t_datos.getSelectedRow(), 3);
            sexo = (String) t_datos.getValueAt(t_datos.getSelectedRow(), 4);
            telefono = (String) t_datos.getValueAt(t_datos.getSelectedRow(), 5);
            direccion = (String) t_datos.getValueAt(t_datos.getSelectedRow(), 6); <- aqui el error
            cargo = (String) t_datos.getValueAt(t_datos.getSelectedRow(), 7);

            String Arreglo[] = new String[6];

            Arreglo = direccion.split(" ");
            dir = Arreglo[0];
            calle = Arreglo[1];
            String simbol = Arreglo[2];
            num1 = Arreglo[3];
            letra = Arreglo[4];
            String symbol = Arreglo[5];
            num2 = Arreglo[6];



            t_ce.setText(cedula);
            t_n.setText(nombre);
            t_a.setText(apellido);
            t_e.setText(edad);
            combosex.setSelectedItem(sexo);
            t_telefono.setText(telefono);
            t_dir.setSelectedItem(dir);
            t_calle.setText(calle);
            t_num1.setText(num1);
            t_letra.setSelectedItem(letra);
            t_num2.setText(num2);
            t_ca.setText(cargo);



        }

alguna ayuda? Gracias
  #2 (permalink)  
Antiguo 30/07/2013, 11:42
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 9 meses
Puntos: 260
Sonrisa Respuesta: Cargar string de una columna y pasarla a varios jtextfield

Hola,

Cita:
Iniciado por drakk92 Ver Mensaje
direccion = (String) t_datos.getValueAt(t_datos.getSelectedRow(), 6); <- aqui el error

Arreglo = direccion.split(" ");
dir = Arreglo[0];
calle = Arreglo[1];
String simbol = Arreglo[2];
num1 = Arreglo[3];
letra = Arreglo[4];
String symbol = Arreglo[5];
num2 = Arreglo[6];
Con esa información solamente es muy difícil adivinar cual es el problema, primero muestra el texto de la excepción que tira tu programa. Adicionalmente sería útil que mostraras la forma como creas el modelo del JTable, es decir, donde creas el JTable con los datos o donde asignas un tableModel.

¿Adicionalmente, que seguridad tienes que el método split va a devolver 6 columnas?

"Hello World".split(" ");

En ese caso solo devolverá 2. Y al intentar accesar la 6 posición seguramente va a tirar un "IndexOutOfBoundException" o algo parecido.

Saludos,
  #3 (permalink)  
Antiguo 30/07/2013, 15:09
Avatar de drakk92  
Fecha de Ingreso: julio-2013
Ubicación: cali
Mensajes: 25
Antigüedad: 11 años, 3 meses
Puntos: 1
Respuesta: Cargar string de una columna y pasarla a varios jtextfield

El error que em da netbeans es este:

Código Java:
Ver original
  1. Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 6
  2.     at formularios.ing_emp.t_datosMouseClicked(ing_emp.java:589)
  3.     at formularios.ing_emp.access$1000(ing_emp.java:19)
  4.     at formularios.ing_emp$11.mouseClicked(ing_emp.java:318)
  5.     at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:270)
  6.     at java.awt.Component.processMouseEvent(Component.java:6508)
  7.     at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
  8.     at java.awt.Component.processEvent(Component.java:6270)
  9.     at java.awt.Container.processEvent(Container.java:2229)
  10.     at java.awt.Component.dispatchEventImpl(Component.java:4861)
  11.     at java.awt.Container.dispatchEventImpl(Container.java:2287)
  12.     at java.awt.Component.dispatchEvent(Component.java:4687)
  13.     at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
  14.     at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4501)
  15.     at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
  16.     at java.awt.Container.dispatchEventImpl(Container.java:2273)
  17.     at java.awt.Window.dispatchEventImpl(Window.java:2719)
  18.     at java.awt.Component.dispatchEvent(Component.java:4687)
  19.     at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
  20.     at java.awt.EventQueue.access$200(EventQueue.java:103)
  21.     at java.awt.EventQueue$3.run(EventQueue.java:694)
  22.     at java.awt.EventQueue$3.run(EventQueue.java:692)
  23.     at java.security.AccessController.doPrivileged(Native Method)
  24.     at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
  25.     at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
  26.     at java.awt.EventQueue$4.run(EventQueue.java:708)
  27.     at java.awt.EventQueue$4.run(EventQueue.java:706)
  28.     at java.security.AccessController.doPrivileged(Native Method)
  29.     at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
  30.     at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
  31.     at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
  32.     at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
  33.     at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
  34.     at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
  35.     at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
  36.     at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)

¿Adicionalmente, que seguridad tienes que el método split va a devolver 6 columnas?

El split lo hago para "Particionar el String de la columna 6" mas no para devolver 6 columnas, porque en realidad mi tabla es de 8 columnas y ya las tengo creadas, yo solo quiero cojer el string de la columna 6 y particionarlo en 7 partes para pegar cada particion de string a unos jtextarea.

se que la columna direccion contiene 7 string porque yo cree el programa para que agrege exactamente 7 string a esa columna, obviamente esa parte esta en otra clase que es la encargada de guardar todos los datos ingresados:

Código Java:
Ver original
  1. String Direccion = Dir1 + " " + Calle + " # " + Num1 + Letra1 + " - " + Num2; //exactamente 7 variables fueron ingresadas

Código Java:
Ver original
  1.  
  2. void cargar() {
  3.  
  4.         String[] titulos = {"Cedula", "Nombre", "Apellido", "Edad", "Sexo", "Telefono", "Direccion", "Cargo"};
  5.         String[] registros = new String[8];
  6.  
  7.         String sql = "SELECT * FROM Empleados";
  8.         DefaultTableModel model = new DefaultTableModel(null, titulos);
  9.  
  10.         conectar cc = new conectar();
  11.         Connection cn = cc.conexion();
  12.         try {
  13.             Statement st = cn.createStatement();
  14.             ResultSet rs = st.executeQuery(sql);
  15.  
  16.             while (rs.next()) {
  17.                 registros[0] = rs.getString("Cedula_e");
  18.                 registros[1] = rs.getString("Nombre_e");
  19.                 registros[2] = rs.getString("Apellido_e");
  20.                 registros[3] = rs.getString("Edad_e");
  21.                 registros[4] = rs.getString("Sexo_e");
  22.                 registros[5] = rs.getString("Telefono_e");
  23.                 registros[6] = rs.getString("Direccion_e");
  24.                 registros[7] = rs.getString("Cargo_e");
  25.  
  26.                 model.addRow(registros);
  27.             }
  28.  
  29.             t_datos.setModel(model);
  30.  
  31.         } catch (SQLException ex) {
  32.             Logger.getLogger(ing_emp.class.getName()).log(Level.SEVERE, null, ex);
  33.         }
  34.  
  35.     }

Aqui cargo la tabla en base a una consulta sql que tengo, obviamente con el programa al iniciar ejecuto el "cargar"


entonces mas abajo le agregue ela ction listener a la tabla...
Código Java:
Ver original
  1. private void t_datosMouseClicked(java.awt.event.MouseEvent evt) {                                    
  2.         desbloquear();
  3.         for (int i = 0; i < t_datos.getRowCount(); i++) {
  4.             String nombre = "", apellido = "", num2 = "", direccion = "", dir = "", calle = "", telefono = "", edad = "", sexo = "", cedula = "", cargo = "", num1 = "", letra = "";
  5.  
  6.             cedula = (String) t_datos.getValueAt(t_datos.getSelectedRow(), 0);
  7.             nombre = (String) t_datos.getValueAt(t_datos.getSelectedRow(), 1);
  8.             apellido = (String) t_datos.getValueAt(t_datos.getSelectedRow(), 2);
  9.             edad = (String) t_datos.getValueAt(t_datos.getSelectedRow(), 3);
  10.             sexo = (String) t_datos.getValueAt(t_datos.getSelectedRow(), 4);
  11.             telefono = (String) t_datos.getValueAt(t_datos.getSelectedRow(), 5);
  12.             direccion = (String) t_datos.getValueAt(t_datos.getSelectedRow(), 6);
  13.             cargo = (String) t_datos.getValueAt(t_datos.getSelectedRow(), 7); <-- en total seria un conteo de 8 que es equivalente a las 8 columnas.
  14.  
  15.             String Arreglo[] = new String[6];  <---- aqui quiero particionar el String de la columna 6 y posteriormente pasar los string a cada jtextfield.
  16.  
  17.             Arreglo = direccion.split(" ");
  18.             dir = Arreglo[0];
  19.             calle = Arreglo[1];
  20.             String simbol = Arreglo[2];
  21.             num1 = Arreglo[3];
  22.             letra = Arreglo[4];
  23.             String symbol = Arreglo[5];
  24.             num2 = Arreglo[6];
  25.  
  26.  
  27.  
  28.             t_ce.setText(cedula);
  29.             t_n.setText(nombre);
  30.             t_a.setText(apellido);
  31.             t_e.setText(edad);
  32.             combosex.setSelectedItem(sexo);
  33.             t_telefono.setText(telefono);
  34.             t_dir.setSelectedItem(dir);
  35.             t_calle.setText(calle);
  36.             t_num1.setText(num1);
  37.             t_letra.setSelectedItem(letra);
  38.             t_num2.setText(num2);
  39.             t_ca.setText(cargo);
  40.  
  41.  
  42.  
  43.         }        
  44.     }

me hago entender? yo no tengo 6 columnas, "yo tengo 8" y la columna 6 tiene un string el cual quiero particionarlo en 7 partes, para enviar cada string a los jtextfield.

Última edición por drakk92; 30/07/2013 a las 15:21
  #4 (permalink)  
Antiguo 30/07/2013, 15:26
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 9 meses
Puntos: 260
Sonrisa Respuesta: Cargar string de una columna y pasarla a varios jtextfield

Hola,

Cita:
Iniciado por drakk92 Ver Mensaje
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 6

¿Adicionalmente, que seguridad tienes que el método split va a devolver 6 columnas?
La excepción es clara "ArrayIndexOutOfBoundsException: 6", estás tratando de accesar la sexta posición de un array que no tiene tantas posiciones.

Cita:
Iniciado por drakk92 Ver Mensaje
El split lo hago para "Particionar el String de la columna 6" mas no para devolver 6 columnas, porque en realidad mi tabla es de 8 columnas y ya las tengo creadas, yo solo quiero cojer el string de la columna 6 y particionarlo para pegar cada particion de string a unos jtextarea.
Cuando me refería a columnas era indices del array, fue un error. El caso es que no hay 6 posiciones o "particiones" como tu le llamas. Es decír al hacer el split no hay 6 valores, hay menos y por eso tira la excepción.

Cita:
Iniciado por drakk92 Ver Mensaje
me hago entender? yo no tengo 6 columnas, "yo tengo 8" y la columna 6 tiene un string el cual quiero particionarlo en 6 partes, para enviar cada string a los jtextfield.
Yo lo entiendo bien, el problema es que aunque haces split a la columna X no devuelve 6 posiciones. El decir, el valor de "Direccion" no se divide en 6, sino en menos. Si fueran mas no habría problema puesto que el método split crea un nuevo array con las posiciones "necesarias" para contener el array. Es decir, aunque lo definas como Array[100] el método split te devuelve un nuevo array solamente con las posiciones que "necesitó" para contenter todos los valores.

Saludos

Adicionalmente:

Cita:
Iniciado por drakk92 Ver Mensaje
String[] titulos = {"Cedula", "Nombre", "Apellido", "Edad", "Sexo", "Telefono", "Direccion", "Cargo"};
String[] registros = new String[8];

model.addRow(registros);

me hago entender? yo no tengo 6 columnas, "yo tengo 8" y la columna 6 tiene un string el cual quiero particionarlo en 6 partes, para enviar cada string a los jtextfield.
En la parte de la creación del modelo de datos no estoy seguro si va a funcionar bien pero ese es otro problema, puesto que estás agregando al modelo el mismo array una y otra vez. Pero eso lo podrás observar mas adelante cuando ingreses varios registros a la tabla.
  #5 (permalink)  
Antiguo 31/07/2013, 10:03
Avatar de drakk92  
Fecha de Ingreso: julio-2013
Ubicación: cali
Mensajes: 25
Antigüedad: 11 años, 3 meses
Puntos: 1
Respuesta: Cargar string de una columna y pasarla a varios jtextfield

"En la parte de la creación del modelo de datos no estoy seguro si va a funcionar bien pero ese es otro problema, puesto que estás agregando al modelo el mismo array una y otra vez. Pero eso lo podrás observar mas adelante cuando ingreses varios registros a la tabla."

Si, se supone que el modelo se esta agregando cada vez pero hay una condicion, es actualizable, es decir cada vez que ingreso un nuevo registro el modelo se actualiza, mostrando el nuevo registro + el anterior, ya eh ingresado ams de 40registros y no me ha dado problema, no se que problema tu mencionas que podria suceder con el modelo.


Bueno una cosa, el problema esta en el array de 6, bueno en total 7 porque empieza desde 0, tengo un string exactamente asi: "Carrera 23 # 23C - 23"

ah ya se.. 23C el "C" se esta agregando, pegado al 23 en total serian 6.. de seguro ese es el problema del porque no sirve el array de 6.

y si el problema era ese..... le estaba entregando un varchar de 6 posiciones a mi DB, y en netbeans estaba particionando en 7 posiciones un varchar que solo tenia 6, por eso fue el error.

Código Java:
Ver original
  1. String Direccion = Dir1 + " " + Calle + " # " + Num1 + Letra1 + " - " + Num2;

Num1 + Letra1 <-- obviamente entrega un numero+letra sin espacio, me toco poner esto y ya me esta cargando todos los String de la columna a varios jtextfield y combobox.

Código Java:
Ver original
  1. String Direccion = Dir1 + " " + Calle + " # " + Num1 +" "+ Letra1 + " - " + Num2;
  #6 (permalink)  
Antiguo 31/07/2013, 10:51
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 9 meses
Puntos: 260
Sonrisa Respuesta: Cargar string de una columna y pasarla a varios jtextfield

Cita:
Iniciado por drakk92 Ver Mensaje
"En la parte de la creación del modelo de datos no estoy seguro si va a funcionar bien pero ese es otro problema, puesto que estás agregando al modelo el mismo array una y otra vez. Pero eso lo podrás observar mas adelante cuando ingreses varios registros a la tabla."

Si, se supone que el modelo se esta agregando cada vez pero hay una condicion, es actualizable, es decir cada vez que ingreso un nuevo registro el modelo se actualiza, mostrando el nuevo registro + el anterior, ya eh ingresado ams de 40registros y no me ha dado problema, no se que problema tu mencionas que podria suceder con el modelo.
Pensé que posiblemente podría haber algún inconveniente, pero revisando la documentación de la API se puede observar que no hay problema. Es decir, en Java todo son referencias inclusive los Arrays, como estabas pasando el mismo Array una y otra vez, pensé que posiblemente el TableModel estaba guardando referencias al mismo Array una y otra vez.

Como decía, en la documentación se observa que el DefaultTableModel usa un Vector de Vectores para almacenar las filas, así que seguramente, su funcionamiento ha de ser: copia el Array que le pasas a un Vector y lo guarda internamente en un Vector de Vectores; por consiguiente al copiar los datos del Array a un Vector ya no es la misma referencia.

http://docs.oracle.com/javase/7/docs...tml#dataVector

En lo personal prefiero implementar AbstractTableModel o extender el DefaultTableModel desde hace mucho tiempo, así que había olvidado como funcionaba internamente el DefaultTableModel, porque esto me permite encapsular el acceso a datos dentro de un componente independiente de la vista (el TableModel). Y de esa forma no uso el Vector de Vectores sino una Lista de Entities (JPA).

Referencia: http://www.forosdelweb.com/f45/no-pu...2/#post3162529

En conclusión, no hay ningún problema con el método que estas usando.

Cita:
Iniciado por drakk92 Ver Mensaje
... y si el problema era ese..... le estaba entregando un varchar de 6 posiciones a mi DB, y en netbeans estaba particionando en 7 posiciones un varchar que solo tenia 6, por eso fue el error.

Código Java:
Ver original
  1. String Direccion = Dir1 + " " + Calle + " # " + Num1 + Letra1 + " - " + Num2;

Num1 + Letra1 <-- obviamente entrega un numero+letra sin espacio, me toco poner esto y ya me esta cargando todos los String de la columna a varios jtextfield y combobox.

Código Java:
Ver original
  1. String Direccion = Dir1 + " " + Calle + " # " + Num1 +" "+ Letra1 + " - " + Num2;
Aun así, si te basas en el concepto del mejor, medio y peor de los casos, deberías de implementarlo de una manera mas estable, aunque nunca vaya a suceder, debería de validar que existan los datos para Dir1, Calle, Num1, etc. Porque si en algún momento llegara a faltar alguno tu aplicación va a volver fallar porque no existen los 6 campos necesarios. Preferiblemente encapsular esa lógica dentro de una Clase independiente que realice la actividad de almacenar los datos temporalmente y proveer la secuencia lógica necesaria para accesarlos con get, set, [6] getValues(), etc.


Pero esto solamente es mi opinión,
Saludos,

Última edición por HackmanC; 31/07/2013 a las 11:06 Razón: edit
  #7 (permalink)  
Antiguo 31/07/2013, 11:09
Avatar de drakk92  
Fecha de Ingreso: julio-2013
Ubicación: cali
Mensajes: 25
Antigüedad: 11 años, 3 meses
Puntos: 1
Respuesta: Cargar string de una columna y pasarla a varios jtextfield

Igual no soy pro en java soy algo noob, y con lo de validar que existan los datos, claro a mi los tutores me dice que siempre hay que tener una lista de excepciones y hacer que el programa este listo para cualquier posible fallo. con referente a validar si existen los campos en cada variable.

Código Java:
Ver original
  1. String Direccion = Dir1 + " " + Calle + " # " + Num1 +" "+ Letra1 + " - " + Num2;

Yo desde el programa estoy forzando al usuario que me los de, porque en mi JFrame yo se los estoy pidiendo que me los ingrese, si me mete un numero en donde va el nombre, le muestro un JPoption pane que le diga: ingrese solo letras en el campo nombre etc, y asi sucesivamente para cada jtextfield, y si me los deja en blanco le digo que tiene que rellenar todos los campos etc. asi que para poder hacer el split de la direccion los campos deben existir proque yo obligo al usuario que los de, sino no deja guardar la direccion.

es decir estoy encapsulando al usuario a tal punto que tiene si o si ingresar datos, porque en mi programa no acepto campos nulos porque se va todo a la DB.

Pues en mi caso no habria que validar los campos de dir1, num1, porque no le deje forma al usuario de que deje null la direccion donde vive.


Igual son conceptos que se manejan, si llega el punto en que llegue a null algun campo ya consideraria hacer la validacion, igual estoy mejorando paso a paso este proyecto que ya varios meses me ha costado mejorarlo.

Gracias por la info.

Etiquetas: columnas, jtable
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 16:15.