[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