⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 phonenumberfield.java

📁 j2me下的1套UI框架.包含j2me开发中会应用的各种低级组件
💻 JAVA
字号:
package com.jmobilecore.ui;

import com.jmobilecore.ui.core.*;

/**
 * This class displays fields in a row for entering phone number
 * information.
 *
 * @author Igor Shevlyakov - initial implementation
 * @author Greg Gridin - redesign
 */
public class PhoneNumberField extends TextField {

    /**
     * The international phone number format, example: 7(812)444-4444/(812)444-4444/444-4444.
     */
    public static final byte CCC_AAA_NNN_NNNN = 1;

    /**
     * The custom phone number format, example: 7(812)444-44-44/(812)444-44-44/444-44-44/44-44-44/4-44-44.
     */
    public static final byte CCC_AAA_NNN_NN_NN = 2;

    /**
     * The current PhoneNumberField formatting style.
     */
    final public byte STYLE = CCC_AAA_NNN_NN_NN;

    /**
     * Constructs a new <code>PhoneNumberField</code> object.
     */
    public PhoneNumberField() {
        this(null);
    };

    /**
     * Constructs a new <code>PhoneNumberField</code> object of specified format
     * with the specified value.
     *
     * @param phoneNumber the phone number, digits only no spaces or dashes
     */
    public PhoneNumberField(String phoneNumber) {
        super(-1, TextComponent.C_NUMERIC);
        composer = new TextFieldComposer(15);
        setText(phoneNumber);
    }

    /**
     * Get formatted according to <code>STYLE</code> phone number
     * or <code>null</code> if <code>PhoneNumberField</code> object value is set to null or incomplete
     *
     * @return the <code>String</code> representing phone number
     */
    public String getFormattedText() {

        if (isValid()) {
            return String.valueOf(getFormattedText(false));
        }
        return null;
    }

    protected char[] getFormattedText(boolean calcCursorOffset) {

        char unformatted[] = composer.getText().toCharArray();
        int unformattedLen = unformatted.length;
        int unfmtCaretPos = composer.getCaretPosition();
        int fmtCaretPos = unfmtCaretPos;
        int curPos = 0;
        char formattedText[] = null;
        if (STYLE==CCC_AAA_NNN_NNNN) {
            if (unformattedLen < 7)
                formattedText = unformatted;
            else if (unformattedLen==7) {
                formattedText = new char[unformattedLen+1];

                for (int i=0; i<unformattedLen; i++) {
                    if (i==unformattedLen-4) {
                        formattedText[curPos++] = '-';
                        if (unfmtCaretPos>=i) fmtCaretPos++;
                    }
                    formattedText[curPos++] = unformatted[i];
                }
            }
            else {
                formattedText = new char[unformattedLen+3];

                for (int i = 0; i < unformattedLen; i++) {
                    if ((i==0 && unformattedLen<10) || i==unformattedLen-10) {
                        formattedText[curPos++] = '(';
                        if (unfmtCaretPos>=i) fmtCaretPos++;
                    }
                    else if (i==unformattedLen-7) {
                        formattedText[curPos++] = ')';
                        if (unfmtCaretPos>=i) fmtCaretPos++;
                    }
                    else if (i==unformattedLen-4) {
                        formattedText[curPos++] = '-';
                        if (unfmtCaretPos>=i) fmtCaretPos++;
                    }
                    formattedText[curPos++] = unformatted[i];
                }
            }
        }
        if (STYLE==CCC_AAA_NNN_NN_NN) {
            if (unformattedLen < 5)
                formattedText = unformatted;
            else if (unformattedLen<=7) {
                formattedText = new char[unformattedLen+2];

                for (int i=0; i<unformattedLen; i++) {
                    if (i==unformattedLen-4 || i==unformattedLen-2) {
                        formattedText[curPos++] = '-';
                        if (unfmtCaretPos>=i) fmtCaretPos++;
                    }
                    formattedText[curPos++] = unformatted[i];
                }
            }
            else {
                formattedText = new char[unformattedLen+4];

                for (int i = 0; i < unformattedLen; i++) {
                    if ((i==0 && unformattedLen<10) || i==unformattedLen-10) {
                        formattedText[curPos++] = '(';
                        if (unfmtCaretPos>=i) fmtCaretPos++;
                    }
                    else if (i==unformattedLen-7) {
                        formattedText[curPos++] = ')';
                        if (unfmtCaretPos>=i) fmtCaretPos++;
                    }
                    else if (i==unformattedLen-4 || i==unformattedLen-2) {
                        formattedText[curPos++] = '-';
                        if (unfmtCaretPos>=i) fmtCaretPos++;
                    }
                    formattedText[curPos++] = unformatted[i];
                }
            }
        }
        if (calcCursorOffset) {
            calculatedCaretPosition = fmtCaretPos;
            calculatedCursorOffset = getCursorOffset(formattedText, calculatedCaretPosition);
        }
        currentLength = formattedText.length;
        return formattedText;
    }

    /**
     * Sets the <code>PhoneNumberField</code> field to specified value
     *
     * @param phoneNumber the phone number, digits only no spaces or dashes
     */
    public void setText(String phoneNumber) {
        if (validate(phoneNumber)) {
            composer.setText(phoneNumber);
        }
    }

    /**
     * Tests phone number field value for correctness
     *
     * @return <code>true</code> if the phone number field is valid
     *         <code>false</code> otherwise
     */
    public boolean isValid() {
        return validate(composer.getText());
    }

    /**
     * Tests if the specified phone number valid
     *
     * @param phoneNumber phone number number without formatting (spaces, dashes etc.)
     * @return <code>true</code> if the phone number field is valid
     *         <code>false</code> otherwise
     */
    public boolean validate(String phoneNumber) {

        if (phoneNumber != null) {
            final int FIELD_LEN = ((TextFieldComposer) composer).getMaxSize();
            if (STYLE==CCC_AAA_NNN_NNNN) {
                if (FIELD_LEN<7) return false;
            }
            else {
                if (FIELD_LEN<5) return false;
            }
            final int REAL_LEN = phoneNumber.length();
            if (REAL_LEN <= FIELD_LEN) {
                char curChar;
                for (int i = 0; i < REAL_LEN; i++) {
                    curChar = phoneNumber.charAt(i);
                    if (!(Character.isDigit(curChar))) return false;
                }
                return true;
            }
        }
        return false;
    }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -