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?