Estava tentando fazer uma classe para gerar um calendário tipo akele que tem no windows qdo vc clica 2x no relógio.
Acontece q estou com um problema qdo o dia da semana que inicia o mês é Domingo ou Sábado.
Se o mês deve iniciar no domingo, ele pula e começa na segunda.
Se deve começar no sábado ele tipo acrescenta mais uma coluna no grid, ficando 8 colunas e ñ exibe a qtda de nº de dias correto.
Pra testar o programa, só mudem o mês no relógio do windows para verem os erros.
import javax.swing.*;
import java.awt.*;
import java.util.*;
public class CData extends JFrame {
private Calendar cal = Calendar.getInstance();
private Calendar oldCal = Calendar.getInstance();
private int mesAntes;;
private int oldSemana;
private int cont = 1;
private JLabel[] lblDatas = new JLabel[38];
private JLabel[] lblTopo = new JLabel[7];
private Container painel;
private JPanel pnMain, pnTopo;
private String[] topo = {"D", "S", "T", "Q", "Q", "S", "S"};
public CopyOfData() {
super("Calendário");
//Verifica se o mês atual é janeiro, e se for a variávei mesAntes vai ser igual a Dezembro(11)
mesAntes = cal.get(Calendar.MONTH) - 1;
if (mesAntes < 0) {
mesAntes = 11;
}
painel = getContentPane();
painel.setLayout(new BorderLayout());
pnMain = new JPanel();
pnMain.setLayout(new GridLayout(5, 7));
pnTopo = new JPanel();
pnTopo.setLayout(new GridLayout(1, 7));
for (int i = 0; i < lblDatas.length; i++) {
lblDatas[i] = new JLabel("");
}
//Acha o dia da semana correspondente ao último dia do mês anterior
oldCal.set(Calendar.MONTH, mesAntes);
oldCal.set(Calendar.DAY_OF_MONTH, oldCal.getActualMaximum(Calendar.DAY_OF_MONTH));
oldSemana = oldCal.get(Calendar.DAY_OF_WEEK);
if (oldSemana + 1 == 8) {
for (int i = 0; i < cal.getActualMaximum(Calendar.DAY_OF_MONTH); i++, cont++) {
pnMain.add(lblDatas[i]);
lblDatas[i].setText(Integer.toString(cont));
}
} else {
for (int i = 0; i < cal.getActualMaximum(Calendar.DAY_OF_MONTH) + oldSemana; i++) {
if (i >= oldSemana) {
pnMain.add(lblDatas[i]);
lblDatas[i].setText(Integer.toString(cont));
cont++;
} else {
pnMain.add(lblDatas[i]);
}
}
}
for (int i = 0; i < lblTopo.length; i++) {
lblTopo[i] = new JLabel(topo[i]);
pnTopo.add(lblTopo[i]);
}
painel.add(pnTopo, BorderLayout.NORTH);
painel.add(pnMain, BorderLayout.CENTER);
setSize(400, 300);
setVisible(true);
}
public static void main(String args[]) {
CData app = new CData();
app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}