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

Eliminar fila de un JTable

Estas en el tema de Eliminar fila de un JTable en el foro de Java en Foros del Web. hola amigos, estoy haciendo un programa para el envío de sms, lo primero que realizo es registrar a los conductores y les genero un tickets ...
  #1 (permalink)  
Antiguo 16/06/2013, 21:36
 
Fecha de Ingreso: agosto-2010
Mensajes: 126
Antigüedad: 13 años, 8 meses
Puntos: 9
Eliminar fila de un JTable

hola amigos, estoy haciendo un programa para el envío de sms, lo primero que realizo es registrar a los conductores y les genero un tickets (turno) a ellos los cargo en un JTable, una ves que el condctor es atendido su tickets es puesto como desactivo.

Lo que quiero es eliminar la fila de mi JTable, al momento de enviar el SMS.

tengo 4 conlumnas, en la cuarta fila cargo un JButton (por cada conductor), al presionar este boton me abre un JDialog, donde cargo el num. de celular (esto lo obtengo de mi JTable) y el mensaje a eviar,

Este es mi código

- tableGuia es mi JTable
Código PHP:
public class frmSincronizar extends javax.swing.JInternalFrame {

    public frmSincronizar() {
        initComponents();

        Dimension pantalla = Toolkit.getDefaultToolkit().getScreenSize();
        Dimension ventana = this.getSize();
        this.setLocation((pantalla.width - ventana.width)/2, (pantalla.height - ventana.height)/6 );
        this.setVisible(true);

        cargarTablaGuia();
    }

public void cargarTablaGuia() {
        String[] columnNames = {"N° Guía","N° Tickets","N° Celular", "Sms"};
        Object[][] data = null;
        try {
            data = gestorPersonal.mostrar(); // de una BD obtengo Guía, N° Tickets, N° Celular.
        } catch (SQLException ex) {
        }
        tablaGuia.setModel(new javax.swing.table.DefaultTableModel(data, columnNames) {
            @Override public Class<?getColumnClass(int column) {
                return 
getValueAt(0column).getClass();
            }
        });

        
tablaGuia.setRowHeight(46);
        
tablaGuia.setAutoCreateRowSorter(true);

        
int[] ={77,85,85,120};
        for(
int i 0i<4i++)
            
tablaGuia.getColumnModel().getColumn(i).setPreferredWidth(v[i]);
        
tablaGuia.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);

        
TableColumn column tablaGuia.getColumnModel().getColumn(3);
        
column.setCellRenderer(new ButtonsRenderer());
        
column.setCellEditor(new ButtonsEditor(tablaGuia));
    }

    public 
void eliminarFila(int fila){
        
DefaultTableModel temp = (DefaultTableModeltablaGuia.getModel();
        
temp.removeRow(fila);
    }
}

class 
ButtonsPanel extends JPanel {
    public final 
java.util.List<JButtonbuttons java.util.Arrays.asList(new JButton("Enviar"));
    public 
ButtonsPanel() {
        
super();
        
setOpaque(true);
        for(
JButton bbuttons) {
            
b.setFocusable(false);
            
b.setRolloverEnabled(false);
            
add(b);
        }
    }
}

class 
ButtonsRenderer extends ButtonsPanel implements TableCellRenderer {
    public 
ButtonsRenderer() {
        
super();
        
setName("Table.cellRenderer");
    }
    
/**/
}

class 
ButtonsEditor extends ButtonsPanel implements TableCellEditor {
     
    public 
ButtonsEditor(final JTable table) {
        
super();
        
MouseListener ml = new MouseAdapter() {
            public 
void mousePressed(MouseEvent e) {
                
ButtonModel m = ((JButton)e.getSource()).getModel();
                if(
m.isPressed() && table.isRowSelected(table.getEditingRow()) && e.isControlDown()) {
                    
setBackground(table.getBackground());
                }
            }
        };
        
buttons.get(0).addMouseListener(ml);
        
buttons.get(0).addActionListener(new ActionListener() {
            @
Override public void actionPerformed(ActionEvent e) {
                
int row table.convertRowIndexToModel(table.getEditingRow());
                
Object cel table.getModel().getValueAt(row1);
                
fireEditingStopped();

                
fmrSms dialog = new fmrSms(new javax.swing.JFrame(), true);
                
dialog.tcelular.setText(String.valueOf(cel));
                
dialog.tmensaje.append("Señor conductor INGRESE a la Balanza 4");
                
                
dialog.fila row// esta parte es solo si borro el código de abajo.

                
dialog.setVisible(true);

// de esta forma elimino la fila una ves que se termina de ejecutar el JDialog 
                
                 
new frmSincronizar().eliminarFila(row);
                 
gestorPersonal.actualizar(String.valueOf(cel)); // actualizo el estado del conductor

                
new frmSincronizar().cargarTablaGuia(); 

//es código es el que no me esta funcionando
            
}
        });

        
addMouseListener(new MouseAdapter() {
            @
Override public void mousePressed(MouseEvent e) {
                
fireEditingStopped();
            }
        });
    }
protected 
void fireEditingStopped() {
        
Object[] listeners listenerList.getListenerList();
        for(
int i listeners.length-2i>=0i-=2) {
            if(
listeners[i]==CellEditorListener.class) {
                if(
changeEvent == nullchangeEvent = new ChangeEvent(this);
                ((
CellEditorListener)listeners[i+1]).editingStopped(changeEvent);
            }
        }
    }
}

Este es mi código de mi JDialog

al presionar el boton de este JDialog me envía el sms, pero tampoco me elimina la fila, lo puse tambien este código para ver si podría funcionar aquí, pero no sucede
Código PHP:
public class fmrSms extends javax.swing.JDialog {

    public 
int fila;
    
frmSincronizar sin = new frmSincronizar();
   

    private 
void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
            
// TODO add your handling code here:
        
try {
                 new 
frmSincronizar().eliminarFila(fila);
                 
gestorPersonal.actualizar(String.valueOf(cel)); 
                 new 
frmSincronizar().cargarTablaGuia(); 
        } catch (
SQLException ex) {
            
Logger.getLogger(fmrSms.class.getName()).log(Level.SEVEREnullex);
        }

        
dispose();

    
// de esta manera envio el mensaje
      
new gestorSms(tcelular.getText(), tmensaje.getText()); 

    } 
mi método eliminarFila funaciona al 100%, lo probé de una forma diferente.

saludos, espero que me hagan notar mi error.
  #2 (permalink)  
Antiguo 16/06/2013, 22:32
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 6 meses
Puntos: 454
Respuesta: Eliminar fila de un JTable

"mi método eliminarFila funaciona al 100%" ... ¿y cual es el problema entonces?

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 17/06/2013, 00:42
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Eliminar fila de un JTable

Cita:
Iniciado por chuidiang Ver Mensaje
"mi método eliminarFila funaciona al 100%" ... ¿y cual es el problema entonces?
Situación 1:
Supongamos que su función eliminarFila funciona al 100%, entonces estoy 100% que no esta llamando a esa función.

Situación 2:
Supongamos que su función eliminarFila no funciona, entonces hay algo mal en ese método.

Situación 3:
Eliminar fila esta mal y ademas no lo esta llamando.

Mi recomendación es que utilices el debugger.
  #4 (permalink)  
Antiguo 17/06/2013, 08:57
 
Fecha de Ingreso: agosto-2010
Mensajes: 126
Antigüedad: 13 años, 8 meses
Puntos: 9
Respuesta: Eliminar fila de un JTable

- funciona al 100% si en un JFrame pongo un JTable y un JButoon, en el boton tengo mi metodo eliminarFila(int fila), presiono el boton y me elimina la fila (0), siempre me tiene que eliminar la fila(0) de eso no hay problema.

mi problema es el siguiente:

1.- tengo un JInternalFrame con un JTable de 4 columnas ("N° Guía","N° Tickets","N° Celular", "Sms"), la cantidad de fila las genero de acuerdo a la cantidad de conductores registrado en mi BD.
2.- para cada fila y columna "Sms" hay un boton que me abre un JDialog.
3.- este JDialog es el que tiene un boton(Enviar), al presionar este boton se tiene que eliminar la fila del JTable que esta en el JInternalFrame.

gracias por su comentarios, espero ahora ser un poco mas claro.
  #5 (permalink)  
Antiguo 17/06/2013, 12:34
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 6 meses
Puntos: 454
Respuesta: Eliminar fila de un JTable

Hola:

Hay mucho código para revisar, pero veo que haces un new frmSrincronizar() cada vez que quieres borrar algo o hacer algo con él. Cada new es una instancia distintas con datos distintos y es un JInternalFrame. ¿Te sale un JInternalFrame cada vez? Aunque no te salga, igual estás borrando del new que acabas de hacer, pero no del que está visible...

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #6 (permalink)  
Antiguo 17/06/2013, 14:51
 
Fecha de Ingreso: agosto-2010
Mensajes: 126
Antigüedad: 13 años, 8 meses
Puntos: 9
Respuesta: Eliminar fila de un JTable

Noo, solo una vez me sale el JInternalFrame. Y si, yo creo que estoy fallando al momento de instanciar.


Este es mi código para cargar el JTable al JInternalFrame

Código PHP:
public class frmSincronizar extends javax.swing.JInternalFrame {

     public frmSincronizar() {
        initComponents();     
        this.setVisible(true);
        cargarTablaGuia();
    }

     public void cargarTablaGuia() {
         String[] columnNames = {"N° Guía","N° Tickets","N° Celular", "Sms"};
        Object[][] data = null;
        try {
            data = gestorPersonal.mostrar();
        } catch (SQLException ex) {
        }
        tablaGuia.setModel(new javax.swing.table.DefaultTableModel(data, columnNames) {
            @Override public Class<?getColumnClass(int column) {
                return 
getValueAt(0column).getClass();
            }
        });

        
TableColumn column tablaGuia.getColumnModel().getColumn(3);
        
column.setCellRenderer(new ButtonsRenderer());
        
column.setCellEditor(new ButtonsEditor(tablaGuia));
    }

    public 
void eliminarFila(int fila){
        
DefaultTableModel temp = (DefaultTableModeltablaGuia.getModel();
        
temp.removeRow(fila);
    }
}

//----------Código que carga los botones a JTable  tablaGuia-------

class ButtonsEditor extends ButtonsPanel implements TableCellEditor {
    public 
int row;
    public 
ButtonsEditor(final JTable table) {
        
super();
        
MouseListener ml = new MouseAdapter() {
            
/*algo*/
        
};
        
buttons.get(0).addMouseListener(ml);
        
buttons.get(0).addActionListener(new ActionListener() {
            @
Override public void actionPerformed(ActionEvent e) {
                
row table.convertRowIndexToModel(table.getEditingRow());
                
Object cel table.getModel().getValueAt(row1);
                
fireEditingStopped();

                
fmrSms dialog = new fmrSms(new javax.swing.JFrame(), true);
                
dialog.tcelular.setText(String.valueOf(cel));
                
dialog.tmensaje.append("Señor conductor INGRESE a la Balanza 4");
                
dialog.fila row;
                
dialog.setVisible(true);
            }
        });
  }
}
---------------Código del JDialog-------------

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

    public 
int fila;
    
frmSincronizar sin = new frmSincronizar();;
    public 
fmrSms(java.awt.Frame parentboolean modal) {
        
super(parentmodal);
        
initComponents();
        
this.setUndecorated(true);
        
this.setLocationRelativeTo(this);
    }

//-----Al darle Click a este boton  debería borrarse la fila de mi JTable-----
    
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        try {
            
sin.eliminarFila(fila);
            
gestorPersonal.actualizar("78509931");
            
sin.cargarTablaGuia();
        } catch (
SQLException ex) {
            
Logger.getLogger(fmrSms.class.getName()).log(Level.SEVEREnullex);
        }
        
dispose();
    }    


Última edición por uagrm; 17/06/2013 a las 15:00
  #7 (permalink)  
Antiguo 17/06/2013, 21:44
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 6 meses
Puntos: 454
Respuesta: Eliminar fila de un JTable

Lo dicho, el problema es hacer tanto new, sólo debes hacer uno.

Tampoco te podemos ayudar si cambias el código...., en el primer post el constructor era este

Código java:
Ver original
  1. public frmSincronizar() {
  2.         initComponents();
  3.  
  4.         Dimension pantalla = Toolkit.getDefaultToolkit().getScreenSize();
  5.         Dimension ventana = this.getSize();
  6.         this.setLocation((pantalla.width - ventana.width)/2, (pantalla.height - ventana.height)/6 );
  7.         this.setVisible(true);
  8.  
  9.         cargarTablaGuia();
  10.     }

que tiene un initComponents y un setVisible(true), que parece has quitado.

Se bueno.
__________________
Apuntes Java
Wiki de Programación

Etiquetas: fila, jtable, programa, string
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 13:06.