Olá Pessoal, procurei a solução, já fiz vários testes, porém, ainda estou com um problema
tenho um JTextField em um Jframe
coloquei uma máscara nele de data:
txtDtNasc = new javax.swing.JTextField();
try{javax.swing.text.MaskFormatter data = new javax.swing.text.MaskFormatter("##/##/####");txtDtNasc = new javax.swing.JFormattedTextField(data);}
catch (Exception e){}
coloquei o evento FocusLost nele, para quando eu sair do campo, ele fazer o cálculo da idade do meu cliente
private void txtDtNascFocusLost(java.awt.event.FocusEvent evt) {
try {
int IdadeCalculada = Funcionalidade.setCalculaIdade(Funcionalidade.setFormataData(txtDtNasc.getText()));
lblIdadeCalculada.setText(""+(IdadeCalculada));
} catch (ParseException ex) {
Logger.getLogger(FormCliente.class.getName()).log(Level.SEVERE, null, ex);
}
}
note que pego o campo TxtDtNasc, pego o texto nelle contido, e passo por parametro para a classe Funcionalidade, no método setFormataData:
que uso para converter a String para Date
[code] public static Date setFormataData(String data) throws ParseException{
Date date = null;
if (data == null || data.equals(""))
return null;
try {
DateFormat formatar = new SimpleDateFormat("dd/mm/yyyy");
date = (java.util.Date)formatar.parse(data);
} catch (ParseException ex) {
throw ex;
}
return date;
}[/code]
e depois passo por parametro para o método setCalculaIdade
[code]
public static int setCalculaIdade (Date DataNascimento){
GregorianCalendar data = new GregorianCalendar();
GregorianCalendar dataAtual = new GregorianCalendar();
int MesNasc; //declarei váriavel para poder fazer alguns testes aqui
int IdadeNaoCalculada;
int IdadeCalculada;
data.setTime(DataNascimento);
MesNasc = data.get(Calendar.MONTH);
IdadeNaoCalculada = dataAtual.get(Calendar.YEAR) - data.get(Calendar.YEAR);
if (MesNasc < dataAtual.get(Calendar.MONTH))//mes de nascimento é menor que o mes atual?
IdadeCalculada = IdadeNaoCalculada;
else if (data.get(Calendar.MONTH) > dataAtual.get(Calendar.MONTH))//mes de nascimento é maior que mes atual?
IdadeCalculada = IdadeNaoCalculada - 1;
else
{
if (data.get(Calendar.DAY_OF_MONTH) <= dataAtual.get(Calendar.DAY_OF_MONTH))//o dia do nascimentoe é menor ou igual ao dia de hoje?
IdadeCalculada = IdadeNaoCalculada;
else
IdadeCalculada = IdadeNaoCalculada - 1;
}
return IdadeCalculada;
}[/code]
meu problema é o seguinte:
pelo que depurei aqui, o dia e o ano estão sendo passados corretamente
porém, o mês, não passa
toda vez a variável MesNasc recebe Zero
alguem sabe me dizer porque por gentileza??
Agredeço desde já!