Verify input (format for date) : Text Event « SWT « Java Tutorial






Verify input (format for date)
/*******************************************************************************
 * Copyright (c) 2000, 2005 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
//package org.eclipse.swt.snippets;
/*
 * Text example snippet: verify input (format for date)
 * 
 * For a list of all SWT example snippets see
 * http://www.eclipse.org/swt/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 TextVerifyInputFormatDate {

  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();
  }
}








17.18.Text Event
17.18.1.Add focus in/out event to TextAdd focus in/out event to Text
17.18.2.Add KeyEvent listener to TextAdd KeyEvent listener to Text
17.18.3.Listen to key Traversed eventListen to key Traversed event
17.18.4.Use a regular expression to verify input(a phone number is used)Use a regular expression to verify input(a phone number is used)
17.18.5.Add events to Text: MouseDown, MouseMove, MouseUp, KeyDown, KeyUp ResizeAdd events to Text: MouseDown, MouseMove, MouseUp, KeyDown, KeyUp Resize
17.18.6.Detect when the user scrolls a text controlDetect when the user scrolls a text control
17.18.7.Verify input (format for date)Verify input (format for date)
17.18.8.Verify input (only allow digits)Verify input (only allow digits)
17.18.9.Text TraverseListener: Tab key event (override Tab behavior to traverse out of a Text)Text TraverseListener: Tab key event (override Tab behavior to traverse out of a Text)
17.18.10.Text default selection event(Return/Enter key)Text default selection event(Return/Enter key)
17.18.11.Add default selection listener to TextAdd default selection listener to Text