Comment faire de la validation de l'entrée d'un widget SWT (Texte)
Comment pouvez ajouter la validation d'un SWT
widget? E. g. Text
?
J'ai essayé les deux suivants (disponibles en ligne):
txtPort.addListener(SWT.Verify,new Listener() {
@Override
public void handleEvent(Event event) {
String port = ((Text)event.widget).getText();
try{
int portNum = Integer.valueOf(port);
if(portNum <0 || portNum > 65535){
event.doit = false;
}
}
catch(Exception ex){
event.doit = false;
}
}
});
Aussi:
txtPort.addVerifyListener(new VerifyListener() {
@Override
public void verifyText(VerifyEvent e) {
String port = ((Text)e.widget).getText();
try{
int portNum = Integer.valueOf(port);
if(portNum <0 || portNum > 65535){
e.doit = false;
}
}
catch(Exception ex){
e.doit = false;
}
}
});
Si j'ajoute un caractère, le curseur stucks et je ne peux même pas le supprimer.
Même si je viens de tout supprimer la première fois, le curseur également stucks et je ne peux pas écrire quoi que ce soit d'autre.
Ce que je suis bien ici? Comment suis-je censé faire de la validation de Text
?
Dans ce cas, je ne veux accepter un certain nombre siégeant en tant que port.
Vous devez vous connecter pour publier un commentaire.
La
VerifyListener
vous créez sera appelée avant tout le texte a été effectivement saisi. Vous actuellement de vérifier le texte qui a déjà été entré pour voir si la valeur est valide, mais il ne sera jamais valide, car aucun texte n'a encore été saisi.Essayez de lire la valeur de
e.text
pour voir si c'est un entier et d'utiliser lee.start
ete.end
propriétés le long de avec la lagetText()
vous avez maintenant à voir si la nouvelle valeur doit être comprise entre 0 et 65535.Une solution plus simple peut être de créer une
ModifyListener
qui permet uniquement d'un bouton de soumission lorsque le Texte du widget texte contient un numéro de port valide.Vous pouvez essayer quelque chose de similaire à ceci:
NumberFormatException
, ne pas utiliser deException
quand vous savez que l'on à attraper.catch(Exception ex){ if(!port.equals("")) {e.doit = false;}}
Je veux suggérer JFace la liaison de données. Vous pouvez facilement ajouter un
ControlDecorationSupport
à votre champ de texte et donner à l'utilisateur une indication sur ce qui se passe mal.