Textfield (Klasse Text) nur für Integer?

Bullitt

Mitglied
Hallo!
Möchte unter SWT ein Textfeld erstellen, was nur Integer annimmt und andere Zeichen erst garnicht darstellt. Irgendwie bekomme ich das nicht hin. Habs mal mit nem KeyListener versucht, der am Textfeld hängt, aber geht das denn nicht irgendwie einfacher?
Für Hinweise oder Lösungsvorschläge wäre ich dankbar...
 
Sieht nicht so aus dass es einfacher oder anders geht. Wieso ist das denn ein Problem, den KeyListener zu benutzen?
 
klappt nicht immer

Hallo!

Ich mache das im Moment so:

Code:
Text text = new Text(s,SWT.BORDER );

text.addKeyListener(new KeyListener() {
	public void keyPressed(KeyEvent e) {
	    char ch = e.character;
	    if (!(ch == 0 || ch == 127 || ch == 8 || ch == 13)
	        && !Character.isDigit(e.character)) {
			StringBuffer sb = new StringBuffer(text.getText());
			int pos = text.getCaretPosition();
			sb.deleteCharAt(pos - 1);
			text.setText(sb.toString());
			text.setSelection(pos - 1);
		}
			
	}

In meiner kleinen Testumgebung funktioniert das auch, wenn ich das aber in mein großes Projekt einfüge, steht beim ausgelesenen String das gedrückte Zeichen noch nicht mit drin. Also wird ein falsches Zeichen rausgelöscht. Irgendwie kommt das KeyEvent an meinen Listener eher an, als das Zeichen beim Textfeld. Ist das vielleicht ein falscher Ansatz?

Danke schonmal...
 
Moin,
ich würde schon davon ausgehen, dass beim Tastendruck die Taste als Key im Event oder so steckt, aber noch lange nicht im TextField eingetragen ist.
Würde sonst auch wenig Sinn machen.
 
geschafft

Moin!

Für die, dies interessiert, hier die Lösung:

Code:
Text text = new Text(s,SWT.BORDER );

text.addVerifyListener(
            new VerifyListener() {
            public void verifyText(VerifyEvent e) {
                if (e.text.length() > 1) {
                    e.doit = true;
                    for (int i = 0; i < e.text.length(); i++) {
                        if (!Character.isDigit(e.text.charAt(i))) {
                            e.doit = false;
                        }
                    }
                } else {
                    e.doit = "0123456789".indexOf(e.text) >= 0;
                }
            }
        });

Jetzt nimmt das SWT-Textfeld nur Zahlen an, auch bei Copy and Paste.
Irgendwie ist der ganze SWT-Kram schlecht dokumentiert. Man muss jedenfalls sehr lange suchen.

Schöne Grüße...
 
Zurück