Problema ao inserir campo data

pessoal é o seguinte, fiz um JFormattedTextField para receber uma data, e um try para verificar o campo JFormattedTextField. se o usuario digita uma data valida
o sistema cadastra. porém se ele digita algo como 40/25/8572 o faz o botão perder a ação. de cadastrar. se o try da erro ele mostra a mensagem de que a data é invalida.
esse é meu codigo

[code]// fiz esse metodo para receber a data

private JFormattedTextField getNascimentoField() {
setLayout(null);
if (nascimentoField == null) {
try {
nascimentoField = new JFormattedTextField(new MaskFormatter(
"##/##/####"));
} catch (ParseException e) {
e.printStackTrace();
}
nascimentoField.setBounds(30, 140, 80, 20);
getContentPane().add(nascimentoField);
}
return nascimentoField;
}

// no action do botao fiz isso

public void actionPerformed(ActionEvent salvar) {
SimpleDateFormat data = new SimpleDateFormat(“dd/MM/yyyy”);

// aqui ele verifica o campo digitado se não esta vazio. se o cara digita algo ele consegui fazer o try só que com uma data muito bagunçada. e trava o botão.
try {
Date dataNasc = data.parse(getNascimentoField()
.getText());
animal.setDateNascimento(dataNasc);

				} catch (ParseException e) {
					JOptionPane.showMessageDialog(null,
							"Data de Nascimento é invalida!");

					e.printStackTrace();
				}

[/code]

como faço um try que verifica que a data é valida? e não uma 78/15/1958
?

Deivid_Ribeiro bom dia!

Com o split voce pode obter os valores e testar separadamente dia mês e ano.

Existem outras formas, essa é uma forma rápida de solucionar seu problema.

Qualquer coisa posta ai.

Até mais.

Fuçando um poco aqui, achei isso:

        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");  
        sdf.setLenient(false);  
        Date aData = sdf.parse(data); 

Vê se resolve.
Read more: http://javafree.uol.com.br/topic-874879-Erro-com-calendarsetLenient.html#ixzz2650jRxkM

Eu estou tentando usar o split da seguinte forma

String dia = getNascimentoField().getText().toString(); String[] dianum = dia.split("\\/"); System.out.println(dianum[0]);
porém encontrei a barreira de não conseguir converter a dianum[0] em inteiro para verificar o tamanho do numero.

O NickStyle mostrou uma dica acima que eu não sabia, mas acabei de fazer uns testes aqui, recomendo.

Realmente NickStyle isso resolveu boa parte do meu problema o que ele fez agora foi o seguinte,
ele aceita a data 40/09/2010 e converte ela para 10/10/2010 faz os dias que passaram incluir no mes.
só que não impede de cadastrar uma data.
queria que se ele digita-se isso impedisse ele de cadastrar.

Da uma olhada se esse trecho de codigo te ajuda


public class DateValidate {

	public static void main(String[] args) {
		
		String stringDate = "40/25/8572";
		
		SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd/MM/yyyy");
		
		String splitDate[] = stringDate.split("/");
		
		for (int i = 0; i < 3; i++) {
			System.out.println(splitDate[i]);
		}
		
	}
	
}

NickStyle valeu cara através da sua logica consegui a solução para o codigo que ficou assim:

        try {
							data.setLenient(false);
							Date dataNasc = data.parse(getNascimentoField()
									.getText());
							
							animal.setDateNascimento(dataNasc);
							AcaoSalvar(salvar);
												
							

						} catch (ParseException e) {
							JOptionPane.showMessageDialog(null,
									"Data de Nascimento é invalida!");

							e.printStackTrace();
						}                                    

[quote=Deivid_Ribeiro]NickStyle valeu cara através da sua logica consegui a solução para o codigo que ficou assim:

[code]
try {
data.setLenient(false);
Date dataNasc = data.parse(getNascimentoField()
.getText());

						animal.setDateNascimento(dataNasc);
						AcaoSalvar(salvar);
											
						

					} catch (ParseException e) {
						JOptionPane.showMessageDialog(null,
								"Data de Nascimento é invalida!");

						e.printStackTrace();
					}                                    

[/code][/quote]

cara desculpa minha ignorancia mas ja aproventando o topico… isso ai valida a data?
Se valida , quando a data é nula o que acontece da erro no gravar somente?