import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;
import calendario.*;
public class EditorFecha extends JButton implements TableCellEditor
{
private Fecha fechaActual = null;
private boolean editable;
private boolean edicionFinalizada;
public EditorFecha(boolean editable)
{
super("");
this.editable = editable;
this.setBorderPainted(false);
this.setMargin(new Insets(0,0,0,0));
ActionListener okListener = new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
mostrarVentana();
}
};
this.addActionListener(okListener);
}
public Component getTableCellEditorComponent(JTable tabla, Object valor, boolean isSelected, int fila, int columna)
{
this.setBackground(tabla.getBackground());
fechaActual = (Fecha) valor;
this.setText(fechaActual.getFecha());
return this;
}
public Object getCellEditorValue()
{
return fechaActual;
}
public boolean isCellEditable(EventObject e)
{
return editable;
}
public boolean shouldSelectCell(EventObject e)
{
return true; //La celda que está siendo editada debe estar seleccionada
}
public boolean stopCellEditing()
{
return edicionFinalizada;
}
public void cancelCellEditing()
{}
public void addCellEditorListener(CellEditorListener cel)
{}
public void removeCellEditorListener(CellEditorListener cel)
{}
public void setCellEditable(boolean editable)
{
this.editable = editable;
}
private void setEdicionFinalizada()
{
edicionFinalizada = true;
}
private void establecerFecha(String fecha)
{
fechaActual = new Fecha(fecha);
this.setText(fecha);
}
private void mostrarVentana()
{
edicionFinalizada = false;
final Calendario calendario = new Calendario();
final JFrame ventana = new JFrame("Seleccione una fecha");
JPanel botonera = new JPanel();
JButton aceptarB = new JButton("Aceptar");
JButton cancelarB = new JButton("Cancelar");
JLabel espacio = new JLabel("");
ActionListener aceptarListener = new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
establecerFecha(calendario.getFecha());
setEdicionFinalizada();
ventana.dispose();
}
};
aceptarB.addActionListener(aceptarListener);
ActionListener cancelarListener = new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
setEdicionFinalizada();
ventana.dispose();
}
};
cancelarB.addActionListener(cancelarListener);
espacio.setPreferredSize(new Dimension(80, 0));
botonera.add(cancelarB, null);
botonera.add(espacio, null);
botonera.add(aceptarB, null);
ventana.getContentPane().setLayout(new BorderLayout());
ventana.getContentPane().add(calendario, BorderLayout.CENTER);
ventana.getContentPane().add(botonera, BorderLayout.SOUTH);
ventana.setSize(400, 200);
ventana.setVisible(true);
}
}