collinm
49 messages | Posté le 21/04/2007 à 14:27:22 Effectuer une vérification ou bien valider ce que l'usager entre devrait toujours être effectuer.
J'ai écrit une petite classe pour valider la saisie de l'usager pour une date.
public class DateDocument extends PlainDocument{
private String currentString=null;
private String dateSeparator=\"-\";
int year=2007;
int mon=1;
int day=1;
/** Creates a new instance of DateDocument */
public DateDocument() {
}
public DateDocument(String pDateSeparator){
dateSeparator=pDateSeparator;
}
public void insertString(int offset, String string, AttributeSet attributes) throws BadLocationException {
StringBuffer sb = new StringBuffer();
String tmpString = string;
char car;
car = string.charAt(0);
int length = getLength();
if (Character.isDigit(car)) {
if(offset<4){
sb.append(car);
if(offset==0)
currentString = string;
else
currentString = currentString + sb.toString();
super.insertString(offset, string, attributes);
}else if(offset==4 && (string.equals(\"0\") || string.equals(\"1\"))) {
sb.append(car);
year = Integer.parseInt(currentString);
currentString = currentString + sb.toString();
string = dateSeparator + sb.toString();
super.insertString(offset, string, attributes);
}else if(offset==5 &&(string.equals(\"0\") || string.equals(\"1\"))){
sb.append(car);
currentString = currentString + sb.toString();
super.insertString(offset, string, attributes);
}else if(offset==6){
System.out.println(currentString.length());
int min=4;
int max=5;
if(currentString.length() ==6){
min=5;
max=6;
}
if((currentString.substring(min,max).equals(\"1\") && Character.getNumericValue(car) < 3)
|| (currentString.substring(min,max).equals(\"0\") && Character.getNumericValue(car) !=0)){
sb.append(car);
string = sb.toString();
currentString = currentString + string;
mon = Integer.parseInt(currentString.substring(min,max+1));
super.insertString(offset, string, attributes);
}
}else if(offset==7 && Character.getNumericValue(car) <= 3){
sb.append(car);
string = sb.toString();
currentString = currentString + sb.toString();
string = dateSeparator + sb.toString();
super.insertString(offset, string, attributes);
}else if(offset==8 && Character.getNumericValue(car) <= 3){
sb.append(car);
string = sb.toString();
currentString = currentString + sb.toString();
super.insertString(offset, string, attributes);
}else if(offset==9){
sb.append(car);
if(currentString.length()==8)
day = Integer.parseInt(currentString.substring(7,8) + sb.toString());
else
day = Integer.parseInt(currentString.substring(6,7) + sb.toString());
System.out.println(year);
System.out.println(mon);
System.out.println(day);
boolean ok = false;
if((( (mon==4 || mon==6 || mon ==9 || mon==11) && day <=30) || (mon==1 || mon==3 || mon==5 || mon==7 || mon==8 || mon ==10 || mon==12) && day<=31) )
ok = true;
else if(year % 4 != 0){
if(mon==2 && day <=28)
ok=true;
} else if ( (year % 4 == 0 && year %100 !=0) || year % 400 == 0){
if(mon==2 && day <=29)
ok=true;
}
if(ok==true){
string = sb.toString();
currentString = currentString + sb.toString();
super.insertString(offset, string, attributes);
}
}
}
}
public void remove(int offset, int length) throws BadLocationException {
int currentLength = getLength();
String currentContent = getText(0, currentLength);
String before = currentContent.substring(0, offset);
String after = currentContent.substring(length+offset,currentLength);
currentString = before + after;
currentString.replaceAll(\"-\",\"\");
super.remove(offset, length);
}
N'hésitez pas à l'améliorer au besoin |