Olá pessoal alguém sabe como posso validar uma data em swing? Quero saber se uma data é valida ou não e mostrar uma msg para o usuário se não for
Validar Data com swing
16 Respostas
mesmo esquema do uppercase…
Cara, tem o JFormattedTextField…Vc obriga o cara a digitar do teu jeito, eu imagino q deve ter um "APENAS UPPERCASE"
Um artigo…
http://www-106.ibm.com/developerworks/java/library/j-mer0625/No forum deve ter coisa pra K ram ba!!!
VELO
Cara não é a mascara que eu quero, isso eu já consegui. Eu quero saber se uma data é válida por exemplo 01/13/2005 não é uma data válida assim como 30/02/2002 tb não entendeu o q quero?
Faz um parse usando o SimpleDateFormat… se der exception eh pq num é valida.
VELO
Isso não funciona pois estou a data vem como long e o java entende 31/01/2005 como 01/02/2005
Você precisa setar setLenient(false) quando você quer usar DateFormat.parse(). Senão ele acha que 31 de fevereiro é 2 ou 3 de março.
import java.util.regex.*;
...
Pattern p = Pattern.compile("^(?:(?:31(\\/|-|\\.)(?:0?[13578]|1[02]))\\1|(?:(?:29|30)(\\/|-|\\.)(?:0?[1,3-9]|1[0-2])\\2))(?:(?:1[6-9]|[2-9]\\d)?\\d{2})$|^(?:29(\\/|-|\\.)0?2\\3(?:(?:(?:1[6-9]|[2-9]\\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\\d|2[0-8])(\\/|-|\\.)(?:(?:0?[1-9])|(?:1[0-2]))\\4(?:(?:1[6-9]|[2-9]\\d)?\\d{2})$");
Matcher m = p.matcher("31/02/1985");
if (!m.find()) System.err.println("Data inválida.");
...
Crianças, não façam isso em casa.
:shock:
da pra explicar ae :?:
:shock:
:shock:
da pra explicar ae :?:
:shock:
Aquilo ali é uma Regular expression que valida datas no formato ‘dd/mm/yyyy’, como o caso do nosso amigo, aparentemente a data dele é na verdade uma String, eu crio uma Pattern e mando buscar na String da data. Se o padrão bater com a String passada, bingo!, é uma data válida. Mas com certeza existem maneiras menos dolorosas de fazer isso.
Valeu vou testar
tente isso.
setInputVerifier(new InputVerifier() {
public boolean verify(JComponent input) {
MData data = (MData) input;
if (data.getText().equals("") || data.getText().equals(" / / ")) return true;
else try {
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
sdf.setLenient(false);
sdf.parse(data.getText());
return true;
} catch (ParseException x) {
return false;
}
}
});
Uma procura bem rapida no forum achei esse topico aqui
:arrow: http://www.guj.com.br/posts/list/2143.java
Melhor que isso, só nascer sabendo…rssss
Mto boa a Regex do Plentz!
Funfou direitinho!
A propósito, fiz uma pra validar hora.
se alguém precisar tá ae:
Pattern.compile("((0[0-9])|(1[0-9])|(2[0-3])){1}:((0[0-9])|(1[0-9])|(2[0-9])|(3[0-9])|(4[0-9])|(5[0-9])){1}");
Abraços
cara, o swingbean faz exatamente o que vc quer http://swingbean.sourceforge.net/. E faz isso colocando uma interface que auxilia muito a inserção de data e valoriza a interface. De uma olhada nos screenshots. Tenho um programa aqui que utiliza, vou ver se acho e posto uma imagem e posto aqui de novo.
Da uma olhada: [URL=http://img291.imageshack.us/my.php?image=swingbeanci6.jpg]
[/URL][URL=http://g.imageshack.us/thpix.php]
[/URL]
Bem prático mesmo.
Mas já resolvi todas minhas validações com Regular Expressions.
Vlwz.
Abraços