Calendario, funciona mas gostaria que comentasem

8 respostas
G
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);
				}	
			}	 
			
		}	
	}   
	
}]

8 Respostas

keller

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…

:wink:

G

A bagunça na identação ocorreu quando postei. :wink:

[]…
GuttoSP

Rafael_Steil

esses ifs() sem implementacao, como em

if (e.getSource()      == jlbAno)   {}
         else if (e.getSource()    == jlbMes)   {}

sao bizarros hein?

Rafael

G

[ if (e.getSource() == jlbAno) {} else if (e.getSource() == jlbMes) {} ]

Cara estes ifs, são para implementação posterior.

[]…
GuttoSP

Rafael_Steil

Bom, entao coloque-os quanto vc for implementar, ao inves de deixar da maneira atual :slight_smile:

Rafael

Ironlynx

Tente usar um Gerenciador de Layout,ou invés de setar ele para null tb seria recomendável! :wink:

caiofilipini

“arturcesar”:
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. :wink:

[]'s

G

caio, grande !
essa foi uma dica bacana, da pra aprender com ela.

valeu, já mudei.

[]…

Criado 13 de setembro de 2004
Ultima resposta 14 de set. de 2004
Respostas 8
Participantes 5