Calendario JCalendar
Enviado por AfHpRzL • 20 de Noviembre de 2011 • 2.174 Palabras (9 Páginas) • 677 Visitas
package calendario;
import java.awt.*;
import java.util.*;
import javax.swing.*;
public class Main extends JFrame {
/**
*
*/
private static final long serialVersionUID = 1L;
private JLabel lblCalendar;
private JPanel pnlDays;
private JButton lblDays[];
private final String days[] = {
"Dom", "Lun", "Mar", "Mie", "Jue", "Vie", "Sab"
};
private final String months[] = {
"Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio",
"Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"
};
private final int daysMonth[] = {
31, 28, 31, 30, 31, 30,
31, 31, 30, 31, 30, 31
};
public Main(int month, int year) {
int offset = 0;
int numDays = 0;
int today = 0;
/**
* GregorianCalendar es una subclase de Calendar, por lo que nos
* proporciona toda la funcionalidad de esta clase y ademas nos brinda
* algunos metodos mas. En este caso estamos iniciando dos
* GregorianCalendar utilizando diferentes constructores.
*
* currCal se inicia con Calendar.getInstance() que nos devuelve un
* Calendar fijado en el dia de hoy.
* cal se inicia con el constructor que recibe la fecha
*/
GregorianCalendar currCal = (GregorianCalendar) Calendar.getInstance();
GregorianCalendar cal = new GregorianCalendar(year, month, 1);
/**
* En caso de que el mes del calendario que iniciamos con la fecha
* actual sea el mismo que el que iniciamos con la fecha pedida
* entonces cambiamos el dia de hoy
*/
if (currCal.get(Calendar.MONTH) == cal.get(Calendar.MONTH) &&
currCal.get(Calendar.YEAR) == cal.get(Calendar.YEAR) ) {
today = currCal.get(Calendar.DATE);
}
/**
* Obtengo el numero de dias del arreglo
*/
numDays = daysMonth[month];
/** Si es biciesto y es febrero le sumo uno al numero de dias */
if (month == Calendar.FEBRUARY && cal.isLeapYear(year)) {
numDays++;
}
/**
* Obtengo el numero de dias que van a ir en blanco.
* Al llamar el metodo get de la siguiente manera
* get(Calendar.DAY_OF_WEEK) nos va a devolver un 0 para domingo, un 1
* para lunes y un 6 para sabado, por lo que es el numero de dias que
* debemos dejar en blanco directamente
*/
offset = cal.get(Calendar.DAY_OF_WEEK);
/**
* El GridLayout en realidad no le hace caso mas que a uno de los dos
* parametros que recibe y en el otro se expande hasta que entren todos
* los controles que se agruegen. Para indicarle cual de los dos debe
* despreciar ponemos un cero, lo que interpreta Java como expande este
* lado hasta que entren todos los controles.
*/
this.setLayout(new BorderLayout());
pnlDays = new JPanel(new GridLayout(0, 7));
lblCalendar = new JLabel(months[month] + " " + year);
lblCalendar.setIcon(
...