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

actualizar jTable??????

Estas en el tema de actualizar jTable?????? en el foro de Java en Foros del Web. hola a todos! llevo media tarde con el mismo problema, y no sé cómo resolverlo. Tengo un jTable en el que meto los datos de ...
  #1 (permalink)  
Antiguo 09/04/2007, 10:51
 
Fecha de Ingreso: febrero-2006
Mensajes: 174
Antigüedad: 18 años, 3 meses
Puntos: 0
actualizar jTable??????

hola a todos!
llevo media tarde con el mismo problema, y no sé cómo resolverlo.

Tengo un jTable en el que meto los datos de una consulta SQL. Luego doy la opción de ordenar estos datos de dos formas diferentes. Por ejemplo, pulsando el botón "por precio", quiero que se ordene por precio. Pero lo quiero en el mismo jTable.

El problema es que no se me actualiza el jTable.

La estructura que sigo es la siguiente:

tengo un método rellenarTabla, que rellena el jTable con los datos de la consulta "inicial". A este método se le llama desde el constructor, justo antes del jbInit();

Código:
public void rellenarTabla(Vector v)
  {
 
  final String[] encabezado={"NºOFERTA","FECHA COMIENZO","FECHA FIN","TAMAÑO CASA","PRECIO"};
  datos=new Object[v.size()][5];

  for(int i=0;i<v.size();i++){
    String noferta=((Oferta)v.elementAt(i)).getNumOferta();
    java.sql.Date diaini=((Oferta)v.elementAt(i)).getDiaIni();
    java.sql.Date diafin=((Oferta)v.elementAt(i)).getDiaFin();
    int tamano=((Oferta)v.elementAt(i)).getTamano();
    float precio=((Oferta)v.elementAt(i)).getPrecio();
    datos[i][0]=noferta;
    datos[i][1]=diaini;
    datos[i][2]=diafin;
    datos[i][3]=new Integer(tamano);
    datos[i][4]=new Float(precio);
  }
  
   tabla_ofertas=new JTable(datos, encabezado);
  
  }
Luego, tengo el action_performed del botón de ordenar:

Código:
private void jButton1_actionPerformed(ActionEvent e)
  {
  try{
   Vector listaofertas=new Vector();
    go=GestorOfertas.getInstance();
    float precio=Float.parseFloat(aux.elementAt(2).toString());  
    int mindias=Integer.parseInt(aux.elementAt(3).toString());
    int habit=Integer.parseInt(aux.elementAt(4).toString());
    int baños=Integer.parseInt(aux.elementAt(5).toString());
       
    listaofertas=go.getTodasOfertas((Date)aux.elementAt(0),(Date)aux.elementAt(1),precio, mindias,habit, baños, "precio");
    rellenarTabla(listaofertas);
     tabla_ofertas.repaint();
    }catch(Exception ex){
    System.out.println(ex.getMessage());
    }
  }
Quiero que sea en la misma ventana, pero no sé cómo hacerlo. Si alguien me puede ayudar le estaría muy agradecida!

muchas gracias!
  #2 (permalink)  
Antiguo 09/04/2007, 11:00
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 7 meses
Puntos: 51
Re: actualizar jTable??????

Entre otras cosas, en el Tutorial de Sun explica como trabajar con tablas, actualizar los datos... e incluso tener tablas ordenables por columnas:

http://java.sun.com/docs/books/tutor...e.html#sorting
  #3 (permalink)  
Antiguo 09/04/2007, 11:19
 
Fecha de Ingreso: julio-2006
Ubicación: Argentina
Mensajes: 14
Antigüedad: 17 años, 10 meses
Puntos: 0
Re: actualizar jTable??????

Hola, si, existe un repaint o un remove del contenido de to Frame, luego
lo volves a mostrar. Heeeee, que pasa cuando alguien te esta modificando
los precios, y el que esta mirando hace rato no sale de tu clase.
A mi se me ocurre que mejor seria hacer un SELECT, por cada boton,
ORDER BY. Que te parece ????.
  #4 (permalink)  
Antiguo 09/04/2007, 13:31
Avatar de Nighter  
Fecha de Ingreso: enero-2007
Mensajes: 97
Antigüedad: 17 años, 4 meses
Puntos: 0
Re: actualizar jTable??????

hola, antes que nada, por lo que veo estas haciendo la tabla, pero como una matriz y despues mandas esa info, yo no lo he probado asi, pero se me hace muy complicado la verdad, te recomiendo que leas un poco sobre modelos que son un objeto asociado a las tablas y puedes usar el DefaultTableModel o crear el tuyo propio implementando del AbstractTableModel, esto es muy util porque si le aplicas algun cambio al modelo, este se refleja de inmediato en la tabla (en la pantalla pues), te anexo un codigo de un proyecto que hice, espero que te sirva:

Código PHP:
package facturacion;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Vector;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;
import org.postgresql.util.PSQLException;

public class 
GenerarFactura extends javax.swing.JFrame 
{
 private 
JFrame productosJF;
 private 
ResultSet rsrs1rs2;
 private 
String nombre;
 public static 
DefaultTableModel modelo
 public static 
double subtotal;
 private 
double ivaivaPreciototal;
 private 
n2t numero;
 private 
String id;
 private 
int renglones;
 private 
Vector detalles;

 public 
GenerarFactura() 
{
 
subtotal 0.0;
 
modelo = new DefaultTableModel();
 
modelo.addColumn("ID PRODUCTO"); 
 
modelo.addColumn("CANTIDAD"); 
 
modelo.addColumn("DESCRIPCION"); 
 
modelo.addColumn("PRECIO UNITARIO"); 
 
modelo.addColumn("IMPORTE"); 

 
initComponents(); 
}

    
// <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents
    
private void initComponents() {
    
        
jTable1.setAutoCreateRowSorter(true);
        
jTable1.setModel(modelo);
        
jScrollPane1.setViewportView(jTable1);
    }
// </editor-fold>//GEN-END:initComponents

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
modelo.removeRow(jTable1.getSelectedRow());
}
//GEN-LAST:event_jButton1ActionPerformed

private void registrarBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_registrarBtnActionPerformed
registrarBtn.setEnabled(false);

int i;

0;

try
{
 
String fechaquery;
  
 
fecha calendarioJCa.getSelectedYear();
 
fecha +="-"calendarioJCa.getSelectedMonth()+"-";
 
fecha += calendarioJCa.getSelectedDay(); 
 
 
query "insert into speedy.factura values(DEFAULT,";
 
query += "'"+id+"','"+fecha+"',";
 
query += ivaTF.getText()+","+subtotalTF.getText()+",1)"
 
 
//System.out.println(query);

 
Servidor.conexion3.IUD(query);
 
renglones modelo.getRowCount();
 
 while(
i<renglones)
 {
  
Servidor.conexion3.IUD("INSERT INTO speedy.facturadet VALUES("+noFacturaTF.getText()+",'"+modelo.getValueAt(i,0)+"',"+modelo.getValueAt(i,1)+","+modelo.getValueAt(i,4)+","+i+")");
  
//System.out.println("INSERT INTO speedy.facturadet VALUES("+noFacturaTF.getText()+",'"+modelo.getValueAt(i,0)+"',"+modelo.getValueAt(i,1)+","+modelo.getValueAt(i,4)+","+i+")");
  
i++;
 }
 
JOptionPane.showMessageDialog(this,"Se a registrado exitosamente la factura","Registro de factura",JOptionPane.INFORMATION_MESSAGE);

catch(
PSQLException ex){JOptionPane.showMessageDialog(this,ex.getMessage(), "Error"JOptionPane.INFORMATION_MESSAGE);}
catch(
SQLException e){JOptionPane.showMessageDialog(this,e.getMessage(), "Error"JOptionPane.INFORMATION_MESSAGE);} 
}
//GEN-LAST:event_registrarBtnActionPerformed

private void siguienteReg()
{
 try
 {
  
rs Servidor.conexion.selectQuery("select idfactura from speedy.factura");
  
rs.last();
  
noFacturaTF.setText(String.valueOf(Byte.parseByte(rs.getString(1))+1));
 }
 catch(
java.sql.SQLException e)
 {
  
JOptionPane.showMessageDialog(this"No se pudo resolver la peticion, \nla base de datos no contiene informacion""Error en peticion"JOptionPane.ERROR_MESSAGE);
  
noFacturaTF.setText("1");
 }
}

private 
void totalTFCaretUpdate(javax.swing.event.CaretEvent evt) {//GEN-FIRST:event_totalTFCaretUpdate
numero = new n2t(); 
n2tTF.setText(numero.convertirLetras((int)total));
}
//GEN-LAST:event_totalTFCaretUpdate

private void ivaTFCaretUpdate(javax.swing.event.CaretEvent evt) {//GEN-FIRST:event_ivaTFCaretUpdate
total subtotal+ivaPrecio;
totalTF.setText(String.valueOf(total));
}
//GEN-LAST:event_ivaTFCaretUpdate

private void subtotalTFCaretUpdate(javax.swing.event.CaretEvent evt) {//GEN-FIRST:event_subtotalTFCaretUpdate
ivaPrecio iva*subtotal;
ivaTF.setText(String.valueOf(ivaPrecio));
}
//GEN-LAST:event_subtotalTFCaretUpdate

    
private void cancelarBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cancelarBtnActionPerformed
this.dispose();
    }
//GEN-LAST:event_cancelarBtnActionPerformed

    
private void clientesCBActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_clientesCBActionPerformed
try
{
 
rs2 Servidor.conexion2.selectQuery("select idcliente, direccion, ciudad, rfc from speedy.cliente where cliente ='"+clientesCB.getSelectedItem().toString()+"'");
 
rs2.next();
 
 
id rs2.getString(1);
 
dirTF.setText(rs2.getString(2));
 
ciudadTF.setText(rs2.getString(3));
 
rfcTF.setText(rs2.getString(4)); 

catch(
PSQLException ex){JOptionPane.showMessageDialog(this,ex.getMessage(), "Error"JOptionPane.INFORMATION_MESSAGE);}
catch(
SQLException e){JOptionPane.showMessageDialog(this,e.getMessage(), "Error"JOptionPane.INFORMATION_MESSAGE);} 
    }
//GEN-LAST:event_clientesCBActionPerformed

    
private void formWindowOpened(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowOpened
siguienteReg();
try
{
 
rs1 Servidor.conexion1.selectQuery("select cliente from speedy.cliente");

 while(
rs1.next())
 {
  
clientesCB.addItem(rs1.getString(1));
 } 

 
rs1 Servidor.conexion1.selectQuery("select * from speedy.iva");
 
rs1.next();
 
iva Double.parseDouble(rs1.getString(1));

catch(
PSQLException ex){JOptionPane.showMessageDialog(this,ex.getMessage(), "Error"JOptionPane.INFORMATION_MESSAGE);}
catch(
SQLException e){JOptionPane.showMessageDialog(this,e.getMessage(), "Error"JOptionPane.INFORMATION_MESSAGE);}   

registrarBtn.setEnabled(true);
    }
//GEN-LAST:event_formWindowOpened

private void selecionProductoPMouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_selecionProductoPMouseEntered
productosJF = new Productos();
//selecionProductoP.setEnabled(false);
productosJF.setVisible(true);
}
//GEN-LAST:event_selecionProductoPMouseEntered



  #5 (permalink)  
Antiguo 10/04/2007, 03:01
 
Fecha de Ingreso: febrero-2006
Mensajes: 174
Antigüedad: 18 años, 3 meses
Puntos: 0
Re: actualizar jTable??????

Nighter, gracias por tu ayuda, el código me ha resultado más aclaratorio que las explicaciones. Sólo una duda, cómo le pasas al JTable o al modelo los datos que va a tener la tabla??? Yo se los paso ya en el momento de la creación, pero no veo en tu código cómo se le van añadiendo los datos.

gracias
  #6 (permalink)  
Antiguo 10/04/2007, 11:20
Avatar de Nighter  
Fecha de Ingreso: enero-2007
Mensajes: 97
Antigüedad: 17 años, 4 meses
Puntos: 0
Re: actualizar jTable??????

el modelo tiene unos metodos para agregar renglones, aqui el codigo que uso para meter renglones en la tabla, lo chido de esto es que como modificas el modelo, la tabla se actualiza instantaneamente

Código PHP:
    private void agregarBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_agregarBtnActionPerformed
if(Integer.parseInt(inventarioTF.getText()) < Integer.parseInt(cantidadTF.getText()))
 
JOptionPane.showMessageDialog(this,"Disculpe, no podemos venderle mas de lo que tenemos","Productos",JOptionPane.INFORMATION_MESSAGE);
else
{
 
valores = new String[5];
 
valores[0] = idProducto
 
valores[1] = cantidadTF.getText(); 
 
valores[2] = productosCB.getSelectedItem().toString();
 
valores[3] = precioUnitarioTF.getText();
 
valores[4] = String.valueOf(Integer.parseInt(valores[1]) * Double.parseDouble(valores[3]));

 
GenerarFactura.subtotal += Double.parseDouble(valores[4]);
 
GenerarFactura.subtotalTF.setText(String.valueOf(GenerarFactura.subtotal));
 
GenerarFactura.modelo.addRow(valores);

  #7 (permalink)  
Antiguo 10/04/2007, 13:14
Avatar de pyanqn  
Fecha de Ingreso: noviembre-2005
Mensajes: 331
Antigüedad: 18 años, 6 meses
Puntos: 8
Re: actualizar jTable??????

Existe una libreria llamada zeus:

http://sourceforge.net/projects/zeus-jscl/

que te proporciona un decorador para JTable, creo que se llama sortedTable, o algo por el estilo. Le proporciona a tu Jtable de esas "flechitas" en el header de cada columna que te ordena la tabla segun elijas.

Muy lindo...
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 00:23.