walidacja danych w JTextField

0

czy zna moze ktos jakis dobry sposob na walidacje danych w polach tekstowych typu JTextField , chodzi mi np o date , zeby nie mozna bylo wpisac glupot tylko normalna date

0

Witam

Użyj klasy SimpleDateFormat, setLenient(false) a metodą parse(String) otrzymasz datę - jeśli będzie nieprawidłowa wyrzuci wyjątek.

Pozdrawiam

0

nie o to mi chodzi

chodzi o to aby sprawdzac w trakcie wpisywania i zeby to wygladalo jkaos tak fajowo

0

Witam

Jeśli podczas pisania to dodaj KeyListenera i tam sprawdzaj moją metodą

Pozdrawiam

0

zrobie keylistenera i bede sprawdzal twoja metoda , to prawde mowiac przy wpisaniu cokolwiek bedize blad wyskakiwal (np ktos zacznie wpisywac napisze 2 i jest juz blad , nie o to mi chodzi zeby miec ciagle bledy ) , mnei tu chodzi o jakies fajne rozwiazanie (najelpiej jkaby to byly wyrazenia regularne , ale niekoniecznie)

0

" Some people, when confronted with a problem, think "I know, I'll use regular expressions." Now they have two problems. " Jamie Zawinski

http://en.wikiquote.org/wiki/Jamie_Zawinski

0

Witam

Moim zdaniem wyrażenia regularne nie nadają się do tego, gdyż za ich pomocą mógłbyś sprawdzić tylko czy układ znaków jest prawidłowy. Dla takiej walidacji zapis 2005-02-35 (rok-miesiąc-dzień) byłby prawidłowy a przecież nie jest. Za pomocą metody parse(String) sprawdzasz i składnie i poprawność.

ktos zacznie wpisywac napisze 2 i jest juz blad

  • tak czy tak błąd będziesz miał od początku - bo 2 nie jest datą ani odpowiednim wyrażeniem regularnym. Jeśli nie chcesz mieć ciągłych błędów to można uwzględnić długość wprowadzonego tekstu.

Pozdrawiam

0

Chyba faktycznie najlepiej sprawdzac po calkowitym wpisaniu. Po co meczyc komentarzami uzytkownika, kiedy tylko wpisze przypadkowo niewlasciwa cyfre/litere. Moze sprawdzac za pomoca SimpleDataFormat przy "wychodzeniu" z pola tekstowego i jezeli data jest bledna to po prostu wypisac ja w okienku na czerwonym tle lub cos w tym stylu... w takim przypadku zakladajac ze uzytkownik nie jest debilem to sam poprawi date :]

0

tzn dostalem wytyczne ze uzytkownik to debil i nie moge dac mu wpisac nic blednego , przypomnialo mi sie cos fajnego (ktos mi kiedys pokazywal) metoda consume() klasy java.awt.event.KeyEvent , zjada to co sie wpisuje (najlepiej przy reakcji Type uzywac) i tez za pomoca tego sobie staram sobie radzic tylezezjada mi takze backspace (w 1.4 a w 1.5 raz tak raz nie,chyba zalezy ktory update wersji)

0

Muły. Musisz nadpisać metodę insertString klasy PlainDocument. Kiedy sprawdzi twoje dane i będą wyglądały tak jak chcesz to nawet ich nie wypisze.

class NumberDocument extends PlainDocument{
private static final long serialVersionUID = 1L;

public void insertString(int position, String string, AttributeSet a) throws BadLocationException{
	if(string == null) return; 
	if(isValid(string))
		super.insertString(position, string, a);
}

public static boolean isValid(String string){
	try{
		Integer.parseInt(string);
		return true;}
	catch(NumberFormatException e){
		return false;}
}

}

class NumberField extends JTextField{
private static final long serialVersionUID = 1L;

public NumberField(int defaultValue){
	super(String.valueOf(defaultValue));}

protected Document createDefaultModel(){
	return new NumberDocument();}

}

Tu masz przykład walidacji, dzięki której nie możesz do TextFielda wpisywać niczego poza cyframi. Będziesz próbował wklepać litere to po prostu nie zareaguje.

0

"Kiedy sprawdzi twoje dane i będą >>setText("NIE")<< wyglądały tak jak chcesz to nawet ich nie wypisze."

O_o ... korekta - bo podejrzewam, że raczej chciałbyś, żeby dane, które wyglądają tak jak mają wyglądać właśnie się wyświetlały :].

korekta 2 - decapitatet (thrown IdiotException .. decapitatet = decapitated) ... kaplica .. muszę się napić

0

Jak dla mnie to za dużo motania z tym...

Wystarczy użyć JFormattedTextField, nawet ze zwykłym MaskFormatter, (lub czymś przeznaczonym bardziej pod datę, na tą chwilę nie pamiętaj, ale tutorial suna na pewno wie) dodać FocusListener i przy utracie focusu sprawdzać poprawność daty odpowiednią metodą, bez pieprzenia się z jakimiś KeyListenerami i innymi pierdołami...

Pozdrawiam

1 użytkowników online, w tym zalogowanych: 0, gości: 1