import java.awt.*;
import java.awt.event.*;
import java.util.GregorianCalendar;
import java.util.Date;
import java.util.Calendar;
import java.util.TimeZone;
import javax.swing.*;
import javax.swing.border.*;
import java.text.*;
class Calendario extends JPanel implements MouseListener {
private JLabel jlbAno = new JLabel();
private JLabel jlbMes = new JLabel();
private JLabel[] jlbDm = { new JLabel(),
new JLabel(),
new JLabel(),
new JLabel(),
new JLabel(),
new JLabel(),
new JLabel(),
new JLabel(),
new JLabel(),
new JLabel(),
new JLabel(),
new JLabel(),
new JLabel(),
new JLabel(),
new JLabel(),
new JLabel(),
new JLabel(),
new JLabel(),
new JLabel(),
new JLabel(),
new JLabel(),
new JLabel(),
new JLabel(),
new JLabel(),
new JLabel(),
new JLabel(),
new JLabel(),
new JLabel(),
new JLabel(),
new JLabel(),
new JLabel(),
new JLabel(),
new JLabel(),
new JLabel(),
new JLabel(),
new JLabel(),
new JLabel(),
new JLabel()};
private JLabel jlbHora = new JLabel();
private JPanel jpnCalend = new JPanel();
private Thread thread = null;
private Calendar calendario = Calendar.getInstance();
private String[] meses = { "Janeiro","Fevereiro","Março","Abril",
"Maio","Junho","Julho","Agosto","Setembro",
"Outubro","Novembro","Dezembro" };
private int[] dmRow = { 0,58,58,58,58,58,58,58,
82,82,82,82,82,82,82,
106,106,106,106,106,106,106,
130,130,130,130,130,130,130,
154,154,154,154,154,154,154,
178,178 };
private int[] dmCol = { 0,5,29,53,77,101,125,149,
5,29,53,77,101,125,149,
5,29,53,77,101,125,149,
5,29,53,77,101,125,149,
5,29,53,77,101,125,149,
5,29 };
private int ano,mes,dia;
public Calendario() {
this.setLayout(null);
this.setBackground(new Color(255, 255, 255));
TimeZone tz = TimeZone.getTimeZone("America/Brasilia");
calendario.setTimeZone(tz);
jpnCalend.setLayout(null);
jpnCalend.setBackground(new Color(227, 228, 228));
jpnCalend.setBorder(new EtchedBorder(null, java.awt.Color.DARK_GRAY));
jpnCalend.setBounds(new Rectangle(8, 8, 179, 235));
cfgLbl(jlbAno,5,5,48,24);
cfgLbl(jlbMes,56,5,117,24);
jlbAno.setText("" + calendario.get(Calendar.YEAR));
jlbMes.setText(meses[calendario.get(Calendar.MONTH)]);
jpnCalend.add(jlbAno);
jpnCalend.add(jlbMes);
jpnCalend.add(dayWeek("D",5,34));
jpnCalend.add(dayWeek("S",29,34));
jpnCalend.add(dayWeek("T",53,34));
jpnCalend.add(dayWeek("Q",77,34));
jpnCalend.add(dayWeek("Q",101,34));
jpnCalend.add(dayWeek("S",125,34));
jpnCalend.add(dayWeek("S",149,34));
for ( int cntJlb = 1; cntJlb < jlbDm.length; cntJlb++) {
jlbDm[cntJlb].setBounds(new Rectangle(dmCol[cntJlb],dmRow[cntJlb],24,24));
jlbDm[cntJlb].setForeground(java.awt.Color.BLACK);
if ( ((jlbDm[cntJlb].getBounds().x) < 10) ) jlbDm[cntJlb].setForeground(java.awt.Color.red);
jlbDm[cntJlb].setFont(new Font("Dialog", 0, 14));
jlbDm[cntJlb].setHorizontalAlignment(4);
jlbDm[cntJlb].setVerticalAlignment(0);
jlbDm[cntJlb].addMouseListener(this);
jpnCalend.add(jlbDm[cntJlb]);
}
ano = calendario.get(Calendar.YEAR);
mes = calendario.get(Calendar.MONTH);
dia = calendario.get(Calendar.DAY_OF_WEEK_IN_MONTH);
calendario.set(ano,mes,1);
diasDoMes();
jlbHora.setBounds(new Rectangle(5,205,168,24));
jlbHora.setBorder(new EtchedBorder(null, java.awt.Color.gray));
jlbHora.setFont(new Font("Dialog", 0, 14));
jlbHora.setForeground(java.awt.Color.BLACK);
jlbHora.setHorizontalAlignment(0);
jlbHora.setVerticalAlignment(0);
jpnCalend.add(jlbHora);
this.add(jpnCalend);
thread = new horas();
thread.start();
}
private JLabel dayWeek( String tit, int me, int ms ) {
JLabel lblDs = new JLabel(tit);
lblDs.setBounds(new Rectangle(me,ms,24,21));
lblDs.setBorder(new EtchedBorder(null, java.awt.Color.gray));
lblDs.setFont(new Font("Dialog", 1, 12));
lblDs.setForeground(java.awt.Color.BLACK);
if ( ((lblDs.getBounds().x) < 10) ) lblDs.setForeground(java.awt.Color.red);
lblDs.setHorizontalAlignment(0);
lblDs.setVerticalAlignment(0);
return lblDs;
}
private void cfgLbl( JLabel lblMa,int me,int ms,int wd,int ht ) {
lblMa.setBounds(new Rectangle(me,ms,wd,ht));
lblMa.setBorder(new EtchedBorder(null, java.awt.Color.gray));
lblMa.setFont(new Font("Dialog", 0, 14));
lblMa.setHorizontalAlignment(0);
lblMa.setVerticalAlignment(0);
lblMa.addMouseListener(this);
}
private void diasDoMes() {
int firstDay = calendario.get(Calendar.DAY_OF_WEEK) ;
int lastDay = calendario.getActualMaximum(Calendar.DAY_OF_MONTH);
int dd = 0;
if ( firstDay == 0 ) { firstDay = 7; }
for( int cntStr = 0; cntStr < jlbDm.length; cntStr++ ) {
if ( cntStr < firstDay ) {
jlbDm[cntStr].setText("");
}
else {
dd++;
if ( dd <= lastDay ) {
jlbDm[cntStr].setText("" + dd);
}
else {
jlbDm[cntStr].setText("");
}
}
}
}
class horas extends Thread {
public void run() {
Date dt = new Date();
SimpleDateFormat hf = new SimpleDateFormat("HH:mm:ss");
SimpleDateFormat df = new SimpleDateFormat("E dd/MMM");
String diaNow = df.format(dt) + " " ;
while(true) {
GregorianCalendar hrs = new GregorianCalendar();
hrs.getInstance();
jlbHora.setText(diaNow + hf.format(hrs.getTime()) + " ");
hrs = null;
}
}
}
public void mouseClicked(MouseEvent e) {
if (e.getSource() == jlbAno) {
if ( e.getButton() == e.BUTTON1) {
ano++;
}
else {
if ( --ano <= 1960 ) { ano = 1960; }
}
jlbAno.setText("" + ano);
calendario.set(ano,mes,1);
diasDoMes();
}
else if (e.getSource() == jlbMes) {
if ( e.getButton() == e.BUTTON1) {
if ( ++mes > 11 ) { mes = 11; }
}
else {
if ( --mes < 0 ) { mes = 0;}
}
jlbMes.setText(meses[mes]);
calendario.set(ano,mes,1);
diasDoMes();
}
}
public void mousePressed(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {
if (e.getSource() instanceof JLabel) {
JLabel source = (JLabel)e.getSource();
source.setFont(new Font("Dialog",1,16));
if (e.getSource() == jlbAno) {}
else if (e.getSource() == jlbMes) {}
else {
if ( ! source.getText().equals("") ) {
source.setBorder(new EtchedBorder(null, java.awt.Color.DARK_GRAY));
}
}
}
}
public void mouseExited(MouseEvent e) {
if (e.getSource() instanceof JLabel) {
JLabel source = (JLabel)e.getSource();
source.setFont(new Font("Dialog",0,14));
if (e.getSource() == jlbAno) {}
else if (e.getSource() == jlbMes) {}
else {
if ( ! source.getText().equals("") ) {
source.setBorder(null);
}
}
}
}
}]
Calendario, funciona mas gostaria que comentasem
8 Respostas
opa tudo bem até funciona mas a identação está horrivel…
while ? que tal um timer para checar a data de 1 em 1 segundo ?
não leve para o lado pessoal apenas dicas…

A bagunça na identação ocorreu quando postei. 
[]…
GuttoSP
esses ifs() sem implementacao, como em
if (e.getSource() == jlbAno) {}
else if (e.getSource() == jlbMes) {}
sao bizarros hein?
Rafael
[ if (e.getSource() == jlbAno) {}
else if (e.getSource() == jlbMes) {}
]
Cara estes ifs, são para implementação posterior.
[]…
GuttoSP
Bom, entao coloque-os quanto vc for implementar, ao inves de deixar da maneira atual 
Rafael
Tente usar um Gerenciador de Layout,ou invés de setar ele para null tb seria recomendável! 
for ( int cntJlb = 1; cntJlb < jlbDm.length; cntJlb++) {
jlbDm[cntJlb].setBounds(new Rectangle(dmCol[cntJlb],dmRow[cntJlb],24,24));
jlbDm[cntJlb].setForeground(java.awt.Color.BLACK);
if ( ((jlbDm[cntJlb].getBounds().x) < 10) ) jlbDm[cntJlb].setForeground(java.awt.Color.red);
jlbDm[cntJlb].setFont(new Font("Dialog", 0, 14));
jlbDm[cntJlb].setHorizontalAlignment(4);
jlbDm[cntJlb].setVerticalAlignment(0);
jlbDm[cntJlb].addMouseListener(this);
jpnCalend.add(jlbDm[cntJlb]);
}
Porque não faz a inicialização dos JLabels dentro do for também? Não há necessidade de criar todos eles lá em cima… Faça assim:
for ( int cntJlb = 1; cntJlb < jlbDm.length; cntJlb++) {
jlbDm[cntJlb] = new JLabel();
// o resto do código é igual ao que já estava no for
}
Daí é só você especificar o tamanho do array na hora de criar, e pronto. 
[]'s
caio, grande !
essa foi uma dica bacana, da pra aprender com ela.
valeu, já mudei.
[]…