[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Newsgroup Home]
[news.eclipse.platform.swt] Using focus to enforce text field validation

The example below (copied from chapter 5 of "SWT: A Developer's Notebook" (http://www.oreilly.com/catalog/swtadn/)) doesn't work. That is to say, you can remove the focus from the second text box when it has less than 3 characters and the ensuing setFocus() call seems to have no effect.

I'm trying this on WinXP using Eclipse v3.1.0 with the corresponding version of SWT.

Anybody have any idea why this isn't working?

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.FocusEvent;
import org.eclipse.swt.events.FocusListener;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.*;

public class TextFieldExample5 {
    Display d;
    Shell s;
    TextFieldExample5()    {
        d = new Display();
        s = new Shell(d);
        s.setSize(250,250);
        s.setImage(new Image(d, "c:\\icons\\JavaCup.ico"));
        s.setText("A Text Field Example");
        final Text text1 = new Text(s, SWT.WRAP |SWT.BORDER);
        text1.setBounds(100,50,100,20);
        text1.setTextLimit(5);
        text1.setEchoChar('*');
        final Text text2 = new Text(s, SWT.SINGLE | SWT.BORDER);
        text2.setBounds(100,75,100,20);
        text2.setTextLimit(30);

        // add a focus listener
        FocusListener focusListener = new FocusListener() {
            public void focusGained(FocusEvent e) {
            }
            public void focusLost(FocusEvent e) {
                Text t = (Text)e.widget;
                if(t==text2)
                {
                    if(t.getText().length() < 3)
                    {
                        t.setFocus(); // << doesn't do anything
                    }
                }
            }
        };
        text1.addFocusListener(focusListener);
        text2.addFocusListener(focusListener);
        s.open();
        while(!s.isDisposed()){
            if(!d.readAndDispatch())
                d.sleep();
        }
        d.dispose();
    }
}

- gil