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

Obtener Id de celda en Jtable

Estas en el tema de Obtener Id de celda en Jtable en el foro de Java en Foros del Web. Buenas gente, queria hacer una consulta que seguro es una tontera pero me estoy rompiendo la cabeza para que funcione. Comienzo explicando: Estoy haciendo un ...
  #1 (permalink)  
Antiguo 23/05/2013, 12:56
 
Fecha de Ingreso: mayo-2013
Mensajes: 2
Antigüedad: 10 años, 10 meses
Puntos: 0
Obtener Id de celda en Jtable

Buenas gente, queria hacer una consulta que seguro es una tontera pero me estoy rompiendo la cabeza para que funcione.


Comienzo explicando:

Estoy haciendo un programa de escritorio donde tengo un Jframe de Provincias con botones Registrar, Modificar y Buscar (Provincia). Este Jframe tiene un Jtable que muestra los siguientes datos.

codProvincia | nombreProvincia | nombrePais

Al buscar una provincia por nombre, el Jtable se llena con esos 3 datos
(resultado de la siguiente consulta con inner join entre las tablas Provincias y Paises)


Código:
SELECT pro.idProv, pro.Provincia, p.Pais 
FROM Provincias as pro
INNER JOIN Paises as p ON p.idPais = pro.codPais
WHERE Provincia LIKE '"+ nombreProv +"%'

Para modificar esta provincia, la debo seleccionar en el Jtable y al presionar el boton Modificar (que me toma los datos seleccionados en la jtable y los lleva a un JDialog llenando textbox, etc....

Y aquí el problema, necesito que la celda seleccionada de la columna"nombrePais" me devuelva la id de ese Pais para poder pasarlo a la siguiente pantalla.

probe algo como esto (realmente no se si esta correcto pero uno empieza a escribir codigos a ver si le pego...)


Código:
Paises p = (Paises) JTable.getValueAt(JTable.getSelectedRow(), 2); 
 int codigo =  p.getIdPais();
y me devuelve este error

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.String cannot be cast to Modelo.Paises

Ojala se entienda lo que necesito, desde ya muchas gracias!
  #2 (permalink)  
Antiguo 23/05/2013, 13:15
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 5 meses
Puntos: 454
Respuesta: Obtener Id de celda en Jtable

Es sencillo, el getValueAt() devuelve lo que has metido. Si metes un String (el nombre del país, por ejemplo), getValueAt() devuelve un String y no un Paises, así que no puedes hacer el cast.

Mete Paises y así te devolverá Paises. Para que salga bien en la celda, ponle a Paises un método public String toString() que devuelva el texto que quieras que se visualice en la celda.

Sería algo parecido a esto http://chuwiki.chuidiang.org/index.p...de_Datos_MySQL , pero en vez de como items de un JComboBox, como values de una celda del JTable.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 23/05/2013, 13:17
 
Fecha de Ingreso: mayo-2013
Ubicación: Córdoba
Mensajes: 139
Antigüedad: 10 años, 10 meses
Puntos: 9
Respuesta: Obtener Id de celda en Jtable

Si no entiendo mal, en la columna nombrePais lo que tienes es el nombre de un país (ejemplo Francia) y tu quieres que al presionar un botón te devuelva el ID de ese país.

Bueno ahora lo que tu estas haciendo, es traer el contenido de esa celda, que es una String, e intentas meterla en un objeto Paises. Esa es la exception que te da.

Para poder conseguir la id de ese país, puedes hacer una consulta a la base de datos pidiéndole que te de la id de ese país, creo que sería lo mas practico.
  #4 (permalink)  
Antiguo 23/05/2013, 13:40
 
Fecha de Ingreso: mayo-2013
Mensajes: 2
Antigüedad: 10 años, 10 meses
Puntos: 0
Respuesta: Obtener Id de celda en Jtable

Gracias por la pronta respuesta a ambos!!!


@chuidiang

Entiendo lo que dijiste y asi fue como lo relacione como si manejara un ComboBox y no tengo problemas con el nombre del pais en la celda el toString en la clase Paises esta bien...

ahora @cazador1992

me entendiste perfecto, asi era mi consulta y la tabla quedaba algo como

CodProvincia =1
nomProvincia = Córdoba
codPais = 1

Donde 1 corresponde al pais Argentina y me funcionaba perfecto PERO establecimos con mi profesor (estoy haciendo la tesis de mi carrera) que estaba mejor que la tabla no mostrara el codigo sino directamente el nombre del Pais, y el tenia razon... pero... NECESITO ESE CODIGO jaja para poder llenar mi combo paises en el jDialog siguiente y realizar la modificacion.

Sino la otra solucion que pensaba era la de ocultar la columna idPais,

Código:
table.removeColumn(ListadoTable.getColumnModel().getColumn(1));
pero si la oculto, mi boton Modificar no toma el dato (idPais) para enviarlo al JDialog..... y es como si le enviara algo vacio.


les ajunto el codigo de mi boton Modificar.


Código:
 private void btnModifActionPerformed(java.awt.event.ActionEvent evt) {                                         
       
        System.out.println(tablePro.getSelectedRow());
       if(tablePro.getSelectedRow()!=-1) //Esto me permite saber si se selecciono o no una fila.
       {
           
          
           //Abre jDialog 
            ModifProvincias modpro = new ModifProvincias(this,true);
          
          
           
           //Paso a la siguiente pantalla los datos de la provincia seleccionada;
           int codigo =Integer.valueOf(tablePro.getValueAt(tablePro.getSelectedRow(), 0).toString());
           String pro = tablePro.getValueAt(tablePro.getSelectedRow(), 1).toString();           
           //int codPais = Integer.valueOf(tablePro.getValueAt(tablePro.getSelectedRow(), 2).toString());
           
          
           //Este es el error
           Paises p = (Paises) tablePro.getValueAt(tablePro.getSelectedRow(), 2); 
           int codPais =  p.getIdPais();
          
           
           
           modpro.getProvSeleccionada(codigo, pro, codPais);
           //Muestro la pantalla 
           modpro.setVisible(true);
                habilitarBotones(true);
           tablePro.setVisible(false);
           //ActualizarTablaModif();
            }
       else
       {  JOptionPane.showMessageDialog(this, "Debe seleccionar una provincia de la tabla para realizar la operacion");  }
    
    }
y mi JDialog que recibe estos datos

Código:
public class ModifProvincias extends javax.swing.JDialog {

    private Conexion conexion;
    private int codSeleccion;
    private int codPaisSeleccion;
    private String nomSeleccion;
    
    public ModifProvincias(java.awt.Frame parent, boolean modal) {
        super(parent, modal);
        initComponents();
        cargarComboPais();
        
         Conexion.getInstance().abrirConexion();
        
      
    }

    public void getProvSeleccionada(int c,String n, int cp)
    { 
      codSeleccion=c;
      nomSeleccion=n;
      codPaisSeleccion = cp;
      habilitarEdicion();
     
      System.out.println("codi" + codSeleccion + "provincia:" + nomSeleccion + "Pais: "+ codPaisSeleccion);

    }
    public void habilitarEdicion()
    {  
        
         setValorSeleccionadoCombo(cboPais, codPaisSeleccion);
         
       
         txtCod.setText(String.valueOf(codSeleccion));
         txtPro.setText(nomSeleccion);
        
      
    }

   
    
    private void setValorSeleccionadoCombo(JComboBox jCombo, int cod) {
   for (int i = 0; i < jCombo.getItemCount(); i++) {
    Paises item = (Paises) jCombo.getItemAt(i);
   if (item.getIdPais()== cod)
   {
    cboPais.setSelectedItem(item);
      }
   }

}
Nuevamente muchas gracias y disculpen si el nombre de las variables los lía un poco...
  #5 (permalink)  
Antiguo 23/05/2013, 18:51
 
Fecha de Ingreso: mayo-2013
Ubicación: Córdoba
Mensajes: 139
Antigüedad: 10 años, 10 meses
Puntos: 9
Respuesta: Obtener Id de celda en Jtable

Insisto con lo que te dije antes, si necesitas el id y tienes el nombre del pais, puedes hacerle una consulta a la base de datos pidiéndole que te entregue el id con ese nombre que le vas a pasar.

Sino te gusta esta opción se me ocurre: tener un vector de tamaño igual a la cantidad de elementos que tiene la tabla, y en cada posición que tenga el ID del país que corresponde a dichas posiciones en la tabla. Entonces para conseguir el id de un país sería algo como:

idCodigoPais = codigosPaises[tablePro.getSelectedRow()];

Etiquetas: celda, jtable, programa
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 01:00.