SWT: setFocus

fanfan

Grünschnabel
SWT: eingabe prüfen, setFocus

Hi,
ich habe eine Oberfläche mit SWT Elementen. Nun möchte ich in einem Textfeld die Eingabe prüfen. Dazu schreibe ich die Prüfung in die LostFocus Methode des Textfeldes. Wenn die Eingabe nicht korrekt erfolgt ist, möchte ich dass der Focus wieder auf dieses Textfeld gesetzt wird.

Mein Code sieht so aus:
Code:
dbname = new Text(this, SWT.BORDER);
dbname.setFont(SWTResourceManager.getFont("", 8, SWT.NONE));
dbname.addFocusListener(new FocusAdapter() {
	public void focusLost(FocusEvent e) {
		String text = dbname.getText();
		if(text!=""){ 
			if (Character.isDigit(text.charAt(0))){
				MessageBox mb = new MessageBox(hauptFenster.getShell(),SWT.OK|SWT.ICON_WARNING);
				mb.setMessage("Der DB-Name darf nicht mit einer Zahl beginnen!");
				mb.open();
				dbname.setText("");
			dbname.setFocus();			
					}
				}
			}				
		});

Leider wird der Focus nicht auf das Textfeld zurückgesetzt sondern auf das nächste Feld.
Weiss jemand wie ich das lösen kann?
Vielen Dank
fanfan
 
Zuletzt bearbeitet:
Hallo!

Schau mal hier:
Code:
/**
 * 
 */
package de.tutorials;

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.VerifyEvent;
import org.eclipse.swt.events.VerifyListener;
import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;

/**
 * @author Darimont
 * 
 */
public class SWTTextFieldValidationExample {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		final Display display = new Display();
		final Shell shell = new Shell(display);
		shell.setText("SWTTextFieldValidationExample");
		shell.setLayout(new RowLayout());

		final Text text0 = new Text(shell, SWT.BORDER);
		final Text text1 = new Text(shell, SWT.BORDER);

		VerifyListener verifyListener = new VerifyListener() {
			public void verifyText(VerifyEvent e) {
				Object src = e.getSource();

				if (src == text0) {
					if (e.text.matches("^\\d+$")) {
						e.doit = false;
						MessageBox box = new MessageBox(shell, SWT.ICON_ERROR);
						box.setMessage("Nur Buchstaben! Versuchte Eingabe: "
								+ e.text);
						box.open();
					}
				} else if (src == text1) {
					if (e.text.matches("^\\D+$")) {
						e.doit = false;
						MessageBox box = new MessageBox(shell, SWT.ICON_ERROR);
						box.setMessage("Nur Zahlen! Versuchte Eingabe: "
								+ e.text);
						box.open();
					}
				}
			}
		};

		text0.addVerifyListener(verifyListener);
		text1.addVerifyListener(verifyListener);

		shell.pack();
		shell.open();

		while (!shell.isDisposed()) {
			if (!display.readAndDispatch()) {
				display.sleep();
			}
		}
	}
}

Gruß Tom
 
kann ich das auch benutzen, wenn ich die gesamte Eingabe prüfen möchte. also nicht einzelne zeichen, sondern erst abwarten bis ein ganzer Ausdruck eingegeben wurde?
 
Zurück