Skip to main content


Eclipse Community Forums
Forum Search:

Search      Help    Register    Login    Home
Home » Eclipse Projects » Standard Widget Toolkit (SWT) » Using focus to enforce text field validation
Using focus to enforce text field validation [message #459335] Fri, 05 August 2005 21:20 Go to next message
Eclipse UserFriend
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 Go to previous messageGo to next message
Grant Gayed is currently offline Grant GayedFriend
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 Go to previous message
Eclipse UserFriend
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
>
>
>
Previous Topic:Where is swt-win32-3138.dll in Eclipse 3.1 SDK?
Next Topic:Context menu on table column header?
Goto Forum:
  


Current Time: Thu Sep 19 21:56:35 GMT 2024

Powered by FUDForum. Page generated in 0.03563 seconds
.:: Contact :: Home ::.

Powered by: FUDforum 3.0.2.
Copyright ©2001-2010 FUDforum Bulletin Board Software

Back to the top