1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package net.sf.webphotos.gui;
17
18 import java.awt.GridLayout;
19 import java.text.SimpleDateFormat;
20 import java.util.Calendar;
21 import java.util.Date;
22 import java.util.GregorianCalendar;
23 import javax.swing.JLabel;
24 import javax.swing.JPanel;
25 import javax.swing.JToggleButton;
26 import org.apache.log4j.Logger;
27
28
29
30
31
32
33 public class Calendario extends JPanel {
34
35 private String[] dias = {"dom", "seg", "ter", "qua", "qui", "sex", "sab"};
36 private String[] meses = {"Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"};
37 private int[] diasNoMes = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
38 private GregorianCalendar calendario = new GregorianCalendar();
39
40 private Logger log = Logger.getLogger(Calendario.class);
41
42
43
44
45
46
47 public Calendario() {
48 calendario.setTime(new Date());
49 }
50
51
52
53
54
55
56
57
58 public Calendario(String formato_ddmmaa) {
59 Date data = null;
60 SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yy");
61 if (formato_ddmmaa.length() == 10) {
62 sdf.applyPattern("dd/MM/yyyy");
63 }
64
65 try {
66 data = sdf.parse(formato_ddmmaa);
67 } catch (Exception e) {
68 log.warn("Erro na conversão de data: " + formato_ddmmaa, e);
69 data = new Date();
70 }
71 calendario.setTime(data);
72 }
73
74
75
76
77
78 public void mostrar() {
79 int indiceMes = calendario.get(Calendar.MONTH);
80 int ano = calendario.get(Calendar.YEAR);
81
82 if (calendario.isLeapYear(ano)) {
83 diasNoMes[1] = 29;
84 }
85
86 String nomeMes = meses[indiceMes];
87 int numDias = diasNoMes[indiceMes];
88
89 calendario.set(Calendar.DATE, 1);
90 int numPrimeiroDiaMes = calendario.get(Calendar.DAY_OF_WEEK);
91
92 int numLinhas = (numDias + numPrimeiroDiaMes - 1) / 7;
93 float resto = (numDias + numPrimeiroDiaMes - 1) % 7;
94 if (resto > 0) {
95 numLinhas++;
96 }
97
98 log.debug(nomeMes + " " + ano);
99 log.debug("numero de dias do mês: " + numDias);
100 log.debug("primeiro dia da semana: " + numPrimeiroDiaMes);
101 log.debug("Linhas: " + numLinhas);
102
103 setLayout(new GridLayout(numLinhas + 1, 7, 1, 1));
104
105 for (int i = 0; i < 7; i++) {
106 add(new JLabel(dias[i]));
107 }
108
109
110 if (numPrimeiroDiaMes > 1) {
111 for (int i = 0; i < numPrimeiroDiaMes - 1; i++) {
112 add(new JLabel(""));
113 }
114 }
115
116 for (int i = 0; i < numDias; i++) {
117 add(new JToggleButton(Integer.toString(i + 1)));
118 }
119
120 setVisible(true);
121 }
122 }