?? phonenumberfield.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) {
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 + -