While working on a wizard, I needed to use text fields that accept only numbers. Following is a snippet of what I used. This text field will only accept digits as input. All other inputs (barring a few) are discarded.
/*
* Specific to Eclipse SWT.
* Related packages
* - org.eclipse.swt.widgets.Text
* - org.eclipse.swt.events.VerifyListener
* - org.eclipse.swt.events.VerifyEvent
* - org.eclipse.swt.SWT
*/
final Text text = new Text(parent, SWT.SINGLE | SWT.BORDER); // use desired style
// Use text.setTextLimit(…) to set a limit on number of digits
/*
* You need to use Verify Listener.
* Key Listener will not block Paste actions, and users may still be able to
* paste non numerals in the text field
*/
text.addVerifyListener(new VerifyListener() {
@Override
public void verifyText(final VerifyEvent event) {
switch (event.keyCode) {
case SWT.BS: // Backspace
case SWT.DEL: // Delete
case SWT.HOME: // Home
case SWT.END: // End
case SWT.ARROW_LEFT: // Left arrow
case SWT.ARROW_RIGHT: // Right arrow
return;
}
if (!Character.isDigit(event.character)) {
event.doit = false; // disallow the action
}
}