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.