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:
  
Le asigno el EditorDeFechas a la tabla de la siguiente manera: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);
     }
}
Código:
  
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.tabla.setDefaultEditor(Date.class, new EditorDeFechas());
Alguien podría hecharle un vistazo al EditorDeFechas para ver qué estoy haciendo mal?
Desde ya muchas gracias.
 
 


