Verify input (format for date) : Text « SWT JFace Eclipse « Java






Verify input (format for date)

Verify input (format for date)
/*
 * Text example snippet: verify input (format for date)
 * 
 * For a list of all SWT example snippets see
 * http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/platform-swt-home/dev.html#snippets
 */
import java.util.Calendar;

import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;

public class Snippet179 {

  public static void main(String[] args) {
    Display display = new Display();
    Shell shell = new Shell(display);
    shell.setLayout(new GridLayout());
    final Text text = new Text(shell, SWT.BORDER);
    text.setText("YYYY/MM/DD");
    ;
    final Calendar calendar = Calendar.getInstance();
    text.addListener(SWT.Verify, new Listener() {
      boolean ignore;

      public void handleEvent(Event e) {
        if (ignore)
          return;
        e.doit = false;
        StringBuffer buffer = new StringBuffer(e.text);
        char[] chars = new char[buffer.length()];
        buffer.getChars(0, chars.length, chars, 0);
        if (e.character == '\b') {
          for (int i = e.start; i < e.end; i++) {
            switch (i) {
            case 0: /* [Y]YYY */
            case 1: /* Y[Y]YY */
            case 2: /* YY[Y]Y */
            case 3: /* YYY[Y] */{
              buffer.append('Y');
              break;
            }
            case 5: /* [M]M */
            case 6: /* M[M] */{
              buffer.append('M');
              break;
            }
            case 8: /* [D]D */
            case 9: /* D[D] */{
              buffer.append('D');
              break;
            }
            case 4: /* YYYY[/]MM */
            case 7: /* MM[/]DD */{
              buffer.append('/');
              break;
            }
            default:
              return;
            }
          }
          text.setSelection(e.start, e.start + buffer.length());
          ignore = true;
          text.insert(buffer.toString());
          ignore = false;
          text.setSelection(e.start, e.start);
          return;
        }

        int start = e.start;
        if (start > 9)
          return;
        int index = 0;
        for (int i = 0; i < chars.length; i++) {
          if (start + index == 4 || start + index == 7) {
            if (chars[i] == '/') {
              index++;
              continue;
            }
            buffer.insert(index++, '/');
          }
          if (chars[i] < '0' || '9' < chars[i])
            return;
          if (start + index == 5 && '1' < chars[i])
            return; /* [M]M */
          if (start + index == 8 && '3' < chars[i])
            return; /* [D]D */
          index++;
        }
        String newText = buffer.toString();
        int length = newText.length();
        StringBuffer date = new StringBuffer(text.getText());
        date.replace(e.start, e.start + length, newText);
        calendar.set(Calendar.YEAR, 1901);
        calendar.set(Calendar.MONTH, Calendar.JANUARY);
        calendar.set(Calendar.DATE, 1);
        String yyyy = date.substring(0, 4);
        if (yyyy.indexOf('Y') == -1) {
          int year = Integer.parseInt(yyyy);
          calendar.set(Calendar.YEAR, year);
        }
        String mm = date.substring(5, 7);
        if (mm.indexOf('M') == -1) {
          int month = Integer.parseInt(mm) - 1;
          int maxMonth = calendar.getActualMaximum(Calendar.MONTH);
          if (0 > month || month > maxMonth)
            return;
          calendar.set(Calendar.MONTH, month);
        }
        String dd = date.substring(8, 10);
        if (dd.indexOf('D') == -1) {
          int day = Integer.parseInt(dd);
          int maxDay = calendar.getActualMaximum(Calendar.DATE);
          if (1 > day || day > maxDay)
            return;
          calendar.set(Calendar.DATE, day);
        } else {
          if (calendar.get(Calendar.MONTH) == Calendar.FEBRUARY) {
            char firstChar = date.charAt(8);
            if (firstChar != 'D' && '2' < firstChar)
              return;
          }
        }
        text.setSelection(e.start, e.start + length);
        ignore = true;
        text.insert(newText);
        ignore = false;
      }
    });
    shell.pack();
    shell.open();
    while (!shell.isDisposed()) {
      if (!display.readAndDispatch())
        display.sleep();
    }
    display.dispose();
  }
}


           
       








Related examples in the same category

1.Text to uppercase
2.Text EventText Event
3.Text and Label demoText and Label demo
4.Wrap LinesWrap Lines
5.Remarks TextRemarks Text
6.Demonstrates text fieldsDemonstrates text fields
7.Demonstrates multiline comments
8.Turns e characters red using a LineStyleListenerTurns e characters red using a LineStyleListener
9.TextField Example 5TextField Example 5
10.TextField Example 4
11.TextField Example 3TextField Example 3
12.TextField Example 2TextField Example 2
13.TextField ExampleTextField Example
14.SWT XML Editor: Modify DOMSWT XML Editor: Modify DOM
15.Draw internationalized styled text on a shellDraw internationalized styled text on a shell
16.Detect when the user scrolls a text controlDetect when the user scrolls a text control
17.Verify input (only allow digits)Verify input (only allow digits)
18.Set the selection (start, end)Set the selection (start, end)
19.Text example snippet: set the selection (i-beam)Text example snippet: set the selection (i-beam)
20.Select all the text in the controlSelect all the text in the control
21.Resize a text control (show about 10 characters)Resize a text control (show about 10 characters)
22.Prompt for a password (set the echo character)Prompt for a password (set the echo character)
23.Stop CR from going to the default buttonStop CR from going to the default button
24.Add a select all menu item to the controlAdd a select all menu item to the control
25.Detect CR in a text or combo control (default selection)Detect CR in a text or combo control (default selection)