Wie zu tun, die Validierung der Eingabe eines SWT-widget (Text)
Wie kann eine Validierung Hinzugefügt eine SWT
widget? E. g. Text
?
Ich habe versucht, die beiden folgenden (online gefunden):
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;
}
}
});
Auch:
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;
}
}
});
Wenn ich ein Zeichen hinzuzufügen, den cursor stucks und kann ich auch nicht löschen.
Auch wenn ich einfach alles löschen das erste mal, dass der cursor auch stucks, und ich kann nicht alles schreiben, was sonst.
Was bin ich Durcheinander hier? Wie soll ich die Validierung einer Text
?
In diesem Fall möchte ich nur eine Zahl anzunehmen dient als Hafen.
InformationsquelleAutor Cratylus | 2012-10-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
VerifyListener
Sie erstellen wird aufgerufen werden, bevor der text tatsächlich eingegeben wurden. Sie prüfen derzeit, der text, der bereits eingegeben wurde, um zu sehen, ob der Wert gültig ist, aber es wird nie gültig, weil kein text muss noch eingegeben werden.Lesen Sie den Wert von
e.text
um zu sehen, ob es sich um eine Ganzzahl, und verwenden Sie diee.start
unde.end
Eigenschaften zusammen mit dergetText()
Sie haben jetzt, um zu sehen, wenn die gesamte neue Wert wird zwischen 0 und 65535.Eine einfachere Lösung könnte sein, erstellen Sie eine
ModifyListener
, die nur ermöglicht die Schaltfläche "senden", wenn Sie das Text-widget das text enthält eine gültige port-Nummer.Können Sie versuchen, etwas ähnlich wie diese:
+1, aber bitte fangen
NumberFormatException
verwenden Sie nichtException
wenn Sie wissen, welche ein zu fangen.zu arbeiten, aber es muss wie folgt geändert werden:
catch(Exception ex){ if(!port.equals("")) {e.doit = false;}}
InformationsquelleAutor Mike K
Möchte ich vorschlagen JFace DataBinding. Sie können ganz einfach einen
ControlDecorationSupport
um Ihre Textfeld, und geben dem Benutzer einige Hinweise, was schief läuft.InformationsquelleAutor CodeSeavers
InformationsquelleAutor Chetan Bhagat