Using focus to enforce text field validation [message #459335] |
Fri, 05 August 2005 21:20 |
Eclipse User |
|
|
|
Originally posted by: gilbert.pilz.bea.com
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
|
|
|
Re: Using focus to enforce text field validation [message #459393 is a reply to message #459335] |
Mon, 08 August 2005 17:48 |
Grant Gayed Messages: 2150 Registered: July 2009 |
Senior Member |
|
|
Hi Gilbert,
This behaviour seems to have changed since the book was published. It will
work if the "t.setFocus();" line is changed to:
d.asyncExec(new Runnable() {
public void run() {
t.setFocus();
}
});
Grant
"Gilbert Pilz" <gilbert.pilz@bea.com> wrote in message
news:dd0l63$65l$1@news.eclipse.org...
> 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
|
|
|
Re: Using focus to enforce text field validation [message #459401 is a reply to message #459393] |
Mon, 08 August 2005 19:12 |
Eclipse User |
|
|
|
Originally posted by: gilbert.pilz.bea.com
Thanks Grant!
This did the trick.
- g
Grant Gayed wrote:
> Hi Gilbert,
>
> This behaviour seems to have changed since the book was published. It will
> work if the "t.setFocus();" line is changed to:
>
> d.asyncExec(new Runnable() {
> public void run() {
> t.setFocus();
> }
> });
>
> Grant
>
> "Gilbert Pilz" <gilbert.pilz@bea.com> wrote in message
> news:dd0l63$65l$1@news.eclipse.org...
>
>>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
>
>
>
|
|
|
Powered by
FUDForum. Page generated in 0.03563 seconds