Se le pasa como parametro el año y, segun el mismo, genera un calendario de 12 filas (una por mes) y diversas columnas identificando el dia de cada mes en que dia de la semana cae.
Os paso el codigo por si os resulta interesante y os quereis ahorrar el tecleo. No dudeis en preguntar alguna duda.
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
public class CeldaCalendario extends JPanel implements MouseListener
{
static final long serialVersionUID=1;
String[][] texto=new String[37][12];//texto a poner en la celda
Color[][] color=new Color[37][12];//color de fondo de la celda
int[] columna=new int[12];
public int anno=0;
Importar importar;//Esta es una clase propia que es otro JPanel con datos que importo, asi que podeis ahorrar o modificar sus alusiones.
public CeldaCalendario(Importar importar)
{
this.importar=importar;
this.addMouseListener(this);
for (int a=0;a<37;a++)
{
for (int b=0;b<12;b++)
{
texto[a][b]="";
color[a][b]=new Color(255,255,200);
}
}
}
public void paint(Graphics g)
{
//pintado de fondo
g.setColor(new Color(255,255,200));
g.fillRect(0,21,667,261);
g.setColor(Color.yellow);
g.fillRect(0,0,667,20);
g.setFont(new Font("Monospaced",0,12));
g.setColor(Color.black);
//dibujo de grid
for (int a=0;a<38;a++)
{
g.drawLine(a*18,0,a*18,260);
}
for (int a=0;a<14;a++)
{
g.drawLine(0,a*20,666,a*20);
}
//dibujo de iniciales dias
String d="LMXJVSD";
for (int a=0;a<37;a++)
{
g.drawString(d.substring(a%7,(a%7)+1),a*18+6,14);
}
for (int a=0;a<37;a++)
{
for (int b=0;b<12;b++)
{
g.setColor(color[a][b]);
g.fillRect(a*18+1,b*20+21,17,19);
g.setColor(Color.black);
g.drawString(texto[a][b],a*18+2,b*20+35);
}
}
}
public void repintar()
{
RepaintManager.currentManager(this).isCompletelyDirty(this);
RepaintManager.currentManager(this).paintDirtyRegions();
}
public void mouseClicked(MouseEvent e)
{
double x,y;
x=e.getPoint().getX();
y=e.getPoint().getY();
marcarPunto((int)x,(int)y);
}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mousePressed(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}
public void marcarPunto(int x, int y)
{
x=(int)(x/18);
y=(int)(y/20);
String textoauxiliar=texto[x][y-1];
if (textoauxiliar.equalsIgnoreCase(""))
return;
int mes=y;
String fecha=textoauxiliar.replace(' ','0')+"-";
if (mes<10)
fecha+="0";
fecha+=mes+"-";
textoauxiliar=(""+anno).substring(2);
fecha+=textoauxiliar;
importar.mostrarFecha(fecha);//este es el metodo que hace llamada al dialogo con los datos correspondientes a la celda
repaint();
}
}
Para generar e inicializar el JPanel dependiendo del año uso este metodo:
public void generarAnno()
{
int anno=comboAnno.getSelectedIndex()+2006;//vale con poner un año de 4 digitos
cc.anno=anno;//cc es el nombre del CeldaCalendario
int dias=365;
if (anno%4==0) dias++;
GregorianCalendar calendario=new GregorianCalendar(anno-1,11,31);
for (int a=0;a<37;a++)
{
for (int b=0;b<12;b++)
{
cc.texto[a][b]="";
cc.color[a][b]=new Color(255,255,0);
}
}
int columna=0;
//pintarTabla
for (int d=0;d
{
calendario.add(GregorianCalendar.DATE,1);
if (calendario.get(GregorianCalendar.DATE)==1)
{
columna=(calendario.get(GregorianCalendar.DAY_OF_WEEK)+5)%7;
cc.columna[calendario.get(GregorianCalendar.MONTH)]=columna;
}
if (calendario.get(GregorianCalendar.DAY_OF_WEEK)==1 || calendario.get(GregorianCalendar.DAY_OF_WEEK)==7)
{
cc.color[columna+calendario.get(GregorianCalendar.DATE)-1][calendario.get(GregorianCalendar.MONTH)]=Color.red;
}
else
{
cc.color[columna+calendario.get(GregorianCalendar.DATE)-1][calendario.get(GregorianCalendar.MONTH)]=Color.white;
}
if (calendario.get(GregorianCalendar.DATE)<10)
cc.texto[columna+calendario.get(GregorianCalendar.DATE)-1][calendario.get(GregorianCalendar.MONTH)]=" "+calendario.get(GregorianCalendar.DATE);
else
cc.texto[columna+calendario.get(GregorianCalendar.DATE)-1][calendario.get(GregorianCalendar.MONTH)]=""+calendario.get(GregorianCalendar.DATE);
}
//aqui se asignan los colores segun los datos obtenidos
for (int d=0;d
{
DatosVacas da=(DatosVacas)vDatos6.elementAt(d);
if (da.fecha.get(GregorianCalendar.YEAR)==anno)
{
if (da.fechaH.get(GregorianCalendar.YEAR)==2001)
cc.color[cc.columna[da.fecha.get(GregorianCalendar.MONTH)]+da.fecha.get(GregorianCalendar.DATE)-1][da.fecha.get(GregorianCalendar.MONTH)]=Color.green;
else
{
GregorianCalendar fechaPoner=(GregorianCalendar)da.fecha.clone();
while (-1
{
if (fechaPoner.get(GregorianCalendar.DAY_OF_WEEK)!=1 && fechaPoner.get(GregorianCalendar.DAY_OF_WEEK)!=7)
{//para que no ponga vacaciones en sabado o domingo
cc.color[cc.columna[fechaPoner.get(GregorianCalendar.MONTH)]+fechaPoner.get(GregorianCalendar.DATE)-1][fechaPoner.get(GregorianCalendar.MONTH)]=Color.green;
}
fechaPoner.add(GregorianCalendar.DATE,1);
}
}
}
}
cc.repintar();
cc.repaint();
}
¡Cambio de look en el blog! No sé pero no me acaba de gustar...
ResponderEliminar¿Y asi te gusta mas? Tonos azules y mis zapatillas de fondo.
ResponderEliminarEste mucho mejor, sin duda. Gracias por tener en cuenta mi opinión. Eres un buen tío (pero no te lo creas, ¿eh?).
ResponderEliminar