Calendário para escolha de data.[RESOLVIDO]

6 respostas
R

Bom dia,

Eu gostaria de colocar na minha aplicação um daqueles calendariozinhos que abrem quando você clica num botão pra escolher a data sabe?Coloco isso do lado de um campo de data e o preguiçoso do usuário não precisa digitar nada.
Minha duvida é: Existe alguma coisa assim meio pronta em java(uma classe ou coisa do gênero) ou vou ter que fazer algo mesmo?
Se sim qual seria a melhor opção? um JDialog?

6 Respostas

_

=|

http://www.toedter.com/en/jcalendar/

R

Nice!
Perfeito!
Brigadão

V

uma pequena duvida…

se eu tivesse q salvar uma data no meu banco de dados ? como q eu faria utilizando esse componente ?

como q ele faz para retornar algo ?

M

Eu tenho uma classe que faz a lógica do calendário. Se quiser posso postar aqui… ou melhor, já postei …

[ :smiley: ]

/**
 * 	Project	: 	sgi
 *	File 	      : 	CalendarioUtil.java
 *	Author	:	Márcio Alves Barroso
 *	Phone	      :	+55 [telefone removido]
 * 	E-mail	:	[email removido]
 *    Version     :   1.0
 *    Created	:	15/02/2006
 */
package sgi.util;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.GregorianCalendar;
import java.util.List;

import sgi.entities.Agenda;
import sgi.facade.SgiAgendaFacade;
import sgi.vo.DiaVO;

/**
 * @author Márcio Alves Barroso
 */
public class CalendarioUtil {
	
	private SgiAgendaFacade agendaFacade;
	public GregorianCalendar calendario;
	public int inicioMes;
	public int diaMes;
	public int semanas;
	
	public CalendarioUtil() {
		this.calendario = new GregorianCalendar();
		construir();
	}
	
	private void construir() {
		int mesN, anoN;
		mesN = calendario.get(Calendar.MONTH);
		anoN = calendario.get(Calendar.YEAR);
		
		this.inicioMes = calendario.get(Calendar.DAY_OF_WEEK);
		this.diaMes = ultimoDiaMes(calendario);
		
		this.calendario.set(Calendar.DAY_OF_MONTH, diaMes );
		this.semanas = this.calendario.get(Calendar.WEEK_OF_MONTH);
		this.calendario = iniciarCalendario(mesN, anoN);
	}	 
	
	public void paginar(int num) {
		this.calendario.add(Calendar.MONTH, num);
		construir();
	}
	
	private GregorianCalendar iniciarCalendario(int mes, int ano) {
		GregorianCalendar cal = new GregorianCalendar();
		cal.set(Calendar.DAY_OF_MONTH, 1);
		cal.set(Calendar.MONTH, mes);
		cal.set(Calendar.YEAR, ano);
		return cal;
	}
	
	public static int ultimoDiaMes(GregorianCalendar cal) {
		GregorianCalendar c = new GregorianCalendar();
		c.set(Calendar.DAY_OF_MONTH, 1);
		c.set(Calendar.MONTH, cal.get(Calendar.MONTH)+1);
		c.set(Calendar.YEAR, cal.get(Calendar.YEAR));
		c.add(Calendar.DAY_OF_MONTH, -1);
		return c.get(Calendar.DAY_OF_MONTH);
	}
	
	public DiaVO iniciarDia() {
		DiaVO d = new DiaVO();
		d.setMes(calendario.get(Calendar.MONTH));
		d.setAno(calendario.get(Calendar.YEAR));
		return d;
	}
	
	public List gerarCalendario(SgiAgendaFacade agendaFacade) throws Exception{
		this.agendaFacade = agendaFacade;
		List<DiaVO> lista = new ArrayList<DiaVO>();
		int dia = 1;
		boolean test = true;
		DiaVO d;
		loop: 	for ( int i=0; test; i++ ) {
					for ( int j=1; j < 8; j++ ) {
						d = iniciarDia();
						if( i == 0 ) {
							if ( j >= inicioMes ) {
								if ( dia <= diaMes ) {
									d.setDia(dia);
									dia++;
								}
							}
						}
						else {
							if ( dia <= diaMes ) {
								d.setDia(dia);
								dia++;
							}
						}
						lista.add(d);
						if( dia > diaMes ) {
							break loop;
						}
					}
				}
		return verificaAgenda(lista);
	}
	
	public List<DiaVO> verificaAgenda(List<DiaVO> lista) throws Exception {
		Collection<Agenda> colecao = agendaFacade.verificarAgendas(this.calendario.getTime());
		
		DiaVO dia;
		for( int i=0; i < lista.size(); i++ ) {
			dia = (DiaVO)lista.get(i);
			dia = comparaDia(colecao, dia);
			lista.set(i, dia);
		}
		
		return lista;
	}
	
	public DiaVO comparaDia(Collection<Agenda> colecao, DiaVO dia ){
		
		GregorianCalendar cal;
		GregorianCalendar diaC = new GregorianCalendar();
		diaC.set(Calendar.DAY_OF_MONTH, dia.getDia());
		diaC.set(Calendar.MONTH, dia.getMes());
		diaC.set(Calendar.YEAR, dia.getAno());
		
		for ( Agenda agenda : colecao ) {
			cal = new GregorianCalendar(); 
			cal.setTime(agenda.getDataEvento());
			
			if( 	cal.get(Calendar.YEAR) == diaC.get(Calendar.YEAR) && 
					cal.get(Calendar.MONTH) == diaC.get(Calendar.MONTH) && 
					cal.get(Calendar.DAY_OF_MONTH) == diaC.get(Calendar.DAY_OF_MONTH)  ) {
				dia.setEvento(true);				
			}
		}
		
		return dia;
	}
	
	public DiaVO verificaMesAno() {
		int mesN, anoN;
		
		mesN = calendario.get(Calendar.MONTH);
		anoN = calendario.get(Calendar.YEAR);
		String [] meses = {"Jan", "Fev", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez"};
		DiaVO d = new DiaVO();
		d.setMesS(meses[mesN]);
		d.setMes(mesN);
		d.setAno(anoN);
		return d;
	}
}
/**
 * 	Project	: 	sgi
 *	File 	      : 	DiaVO.java
 *	Author	:	Márcio Alves Barroso
 *	Phone	      :	+55 [telefone removido]
 * 	E-mail	:	[email removido]
 *    Version     :   1.0
 *    Created	:	15/02/2006
 */
package sgi.vo;


/**
 * @author Márcio Alves Barroso
 */
public class DiaVO {
	
	private int dia;
	private int mes;
	private int ano;
	private int num;
	private String mesS;
	private boolean evento = false;
	
	public String getMesS() {
		return mesS;
	}
	public void setMesS(String mesS) {
		this.mesS = mesS;
	}
	public int getAno() {
		return ano;
	}
	public void setAno(int ano) {
		this.ano = ano;
	}
	public int getMes() {
		return mes;
	}
	public void setMes(int mes) {
		this.mes = mes;
	}
	public int getDia() {
		return dia;
	}
	public void setDia(int dia) {
		this.dia = dia;
	}
	public boolean isEvento() {
		return evento;
	}
	public void setEvento(boolean evento) {
		this.evento = evento;
	}
	public int getNum() {
		return num;
	}
	public void setNum(int num) {
		this.num = num;
	}
}

Desculpe por não estar documentado.

Qualquer dúvida, dá um toque

R

Marcio vou dar uma mexida nesse código pra testar ele aqui ok?

È porque como não tenho o código da classe AgendaFacade vou precisar mexer um pouquinho
E também porque uso Java 2

E

marciobarroso,
Um cara como eu que estou aprendendo na “Marra” como faço para que isso funcione no net beans?

Criado 19 de abril de 2006
Ultima resposta 8 de fev. de 2008
Respostas 6
Participantes 5