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

JTable - Editor de Fechas

Estas en el tema de JTable - Editor de Fechas en el foro de Java en Foros del Web. Buenos días a todos los foristas! Leyendo al página de Chiudiang acerca de los editores de celdas,´diseñé un editor para fechas. La clase sería la ...
  #1 (permalink)  
Antiguo 14/06/2010, 08:43
 
Fecha de Ingreso: mayo-2010
Mensajes: 5
Antigüedad: 13 años, 10 meses
Puntos: 0
JTable - Editor de Fechas

Buenos días a todos los foristas!
Leyendo al página de Chiudiang acerca de los editores de celdas,´diseñé un editor para fechas. La clase sería la siguiente:
Código:
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.EventObject;
import java.util.LinkedList;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.event.CellEditorListener;
import javax.swing.event.ChangeEvent;
import javax.swing.table.TableCellEditor;

public class EditorDeFechas extends JTextField implements TableCellEditor {

    final SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");
    private String fecha = null;
    private LinkedList suscriptores = new LinkedList();

    public EditorDeFechas() {
        super();
        this.addActionListener(new ActionListener() {
             public void actionPerformed (ActionEvent evento) {
                 editado(true);
             }
         });

        this.addFocusListener(new java.awt.event.FocusAdapter() {
            @Override
            public void focusGained(java.awt.event.FocusEvent evt) {
                FocusGained(evt);
            }
            @Override
            public void focusLost(java.awt.event.FocusEvent evt) {
                FocusLost(evt);
            }
        });

    }

    private void FocusGained(java.awt.event.FocusEvent evt) {
        this.selectAll();
    }

    private void FocusLost(java.awt.event.FocusEvent evt) {
        editado(false);
    }

    public Component getTableCellEditorComponent(JTable tabla, Object valor, boolean isSelected, int fila, int columna) {
        //fecha = (valor == null) ? "" : formato.format(valor);
        if (valor instanceof Date){
            fecha = formato.format((Date)valor);
        } else {
            fecha="";
        }
        this.setText(fecha);
        return this;
    }

    @Override
    public void cancelCellEditing() {
    }

    @Override
    public boolean shouldSelectCell(EventObject e) {
        return true; 
    }

    public Object getCellEditorValue() {
        return fecha;
    }

    @Override
    public boolean isCellEditable(EventObject e) {
        return true;
    }

    @Override
    public boolean stopCellEditing() {
        /*
        String unaFecha = campo.getText();
        formato.setLenient(false);
        try {
            formato.parse(unaFecha.trim());
            return true;
        } catch (ParseException pe) {
            ExceptionManager ex=new ExceptionManager();
            ex.setErrorDeNegocio("Fecha no Válida");
            ex.setErrorTecnico(pe.getMessage());
            JOptionPane.showMessageDialog(null, ex.getErrorDeNegocio(), ex.getErrorTecnico(), JOptionPane.ERROR_MESSAGE);
            return false;
        }
         *
         */
        return true;
    }

    protected void editado(boolean cambiado) {
         ChangeEvent evento = new ChangeEvent (this);
         int i;
         for (i=0; i<suscriptores.size(); i++)  {
             CellEditorListener aux = (CellEditorListener) suscriptores.get(i);
             if (cambiado)
                aux.editingStopped(evento);
             else
                aux.editingCanceled(evento);
         }
     }

    @Override
     public void addCellEditorListener(CellEditorListener l) {
         suscriptores.add (l);
     }

    @Override
    public void removeCellEditorListener(CellEditorListener l) {
         suscriptores.remove(l);
     }



}
Le asigno el EditorDeFechas a la tabla de la siguiente manera:
Código:
tabla.setDefaultEditor(Date.class, new EditorDeFechas());
El problema que tengo es que al editar la fecha, cambiarla por otra y darle enter, no me toma el valor nuevo sino que me deja el anterior.

Alguien podría hecharle un vistazo al EditorDeFechas para ver qué estoy haciendo mal?
Desde ya muchas gracias.

Etiquetas: editor, fechas, 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 22:32.