Methods Summary |
---|
private java.lang.Object | convertValueToValueClass(java.lang.Object value, java.lang.Class valueClass)Converts the passed in value to the passed in class. This only
works if valueClass is one of Integer ,
Long , Float , Double ,
Byte or Short and value
is an instanceof Number .
if (valueClass != null && (value instanceof Number)) {
if (valueClass == Integer.class) {
return new Integer(((Number)value).intValue());
}
else if (valueClass == Long.class) {
return new Long(((Number)value).longValue());
}
else if (valueClass == Float.class) {
return new Float(((Number)value).floatValue());
}
else if (valueClass == Double.class) {
return new Double(((Number)value).doubleValue());
}
else if (valueClass == Byte.class) {
return new Byte(((Number)value).byteValue());
}
else if (valueClass == Short.class) {
return new Short(((Number)value).shortValue());
}
}
return value;
|
private java.text.DecimalFormatSymbols | getDecimalFormatSymbols()Returns the DecimalFormatSymbols from the Format instance.
Format f = getFormat();
if (f instanceof DecimalFormat) {
return ((DecimalFormat)f).getDecimalFormatSymbols();
}
return null;
|
private char | getDecimalSeparator()Returns the character that is used to toggle to negative values.
DecimalFormatSymbols dfs = getDecimalFormatSymbols();
if (dfs != null) {
return dfs.getDecimalSeparator();
}
return '.";
|
private java.text.NumberFormat$Field | getFieldFrom(int index, int direction)Returns the first NumberFormat.Field starting
index incrementing by direction .
if (isValidMask()) {
int max = getFormattedTextField().getDocument().getLength();
AttributedCharacterIterator iterator = getIterator();
if (index >= max) {
index += direction;
}
while (index >= 0 && index < max) {
iterator.setIndex(index);
Map attrs = iterator.getAttributes();
if (attrs != null && attrs.size() > 0) {
Iterator keys = attrs.keySet().iterator();
while (keys.hasNext()) {
Object key = keys.next();
if (key instanceof NumberFormat.Field) {
return (NumberFormat.Field)key;
}
}
}
index += direction;
}
}
return null;
|
private char | getMinusSign()Returns the character that is used to toggle to negative values.
DecimalFormatSymbols dfs = getDecimalFormatSymbols();
if (dfs != null) {
return dfs.getMinusSign();
}
return '-";
|
private char | getPositiveSign()Returns the character that is used to toggle to positive values.
return '+";
|
boolean | isLegalInsertText(java.lang.String text)Subclassed to return false if text contains in an invalid
character to insert, that is, it is not a digit
(Character.isDigit() ) and
not one of the characters defined by the DecimalFormatSymbols.
if (getAllowsInvalid()) {
return true;
}
for (int counter = text.length() - 1; counter >= 0; counter--) {
char aChar = text.charAt(counter);
if (!Character.isDigit(aChar) &&
specialChars.indexOf(aChar) == -1){
return false;
}
}
return true;
|
boolean | isLiteral(java.util.Map attrs)Subclassed to treat the decimal separator, grouping separator,
exponent symbol, percent, permille, currency and sign as literals.
if (!super.isLiteral(attrs)) {
if (attrs == null) {
return false;
}
int size = attrs.size();
if (attrs.get(NumberFormat.Field.GROUPING_SEPARATOR) != null) {
size--;
if (attrs.get(NumberFormat.Field.INTEGER) != null) {
size--;
}
}
if (attrs.get(NumberFormat.Field.EXPONENT_SYMBOL) != null) {
size--;
}
if (attrs.get(NumberFormat.Field.PERCENT) != null) {
size--;
}
if (attrs.get(NumberFormat.Field.PERMILLE) != null) {
size--;
}
if (attrs.get(NumberFormat.Field.CURRENCY) != null) {
size--;
}
if (attrs.get(NumberFormat.Field.SIGN) != null) {
size--;
}
if (size == 0) {
return true;
}
return false;
}
return true;
|
boolean | isNavigatable(int index)Subclassed to make the decimal separator navigatable, as well
as making the character between the integer field and the next
field navigatable.
if (!super.isNavigatable(index)) {
// Don't skip the decimal, it causes wierd behavior
if (getBufferedChar(index) == getDecimalSeparator()) {
return true;
}
return false;
}
return true;
|
private boolean | isOnlyIntegerField(int offset, int length)Returns true if the range offset to length identifies the only
integer field.
if (isValidMask()) {
int start = getAttributeStart(NumberFormat.Field.INTEGER);
if (start != -1) {
AttributedCharacterIterator iterator = getIterator();
iterator.setIndex(start);
if (offset > start || iterator.getRunLimit(
NumberFormat.Field.INTEGER) > (offset + length)) {
return false;
}
return true;
}
}
return false;
|
private boolean | isValidInsertionCharacter(char aChar)
return (Character.isDigit(aChar) || specialChars.indexOf(aChar) != -1);
|
void | replace(javax.swing.text.DocumentFilter$FilterBypass fb, int offset, int length, java.lang.String string, javax.swing.text.AttributeSet attr)Overriden to toggle the value if the positive/minus sign
is inserted.
if (!getAllowsInvalid() && length == 0 && string != null &&
string.length() == 1 &&
toggleSignIfNecessary(fb, offset, string.charAt(0))) {
return;
}
super.replace(fb, offset, length, string, attr);
|
public void | setFormat(java.text.Format format)Sets the format that dictates the legal values that can be edited
and displayed.
If you have used the nullary constructor the value of this property
will be determined for the current locale by way of the
NumberFormat.getNumberInstance() method.
super.setFormat(format);
DecimalFormatSymbols dfs = getDecimalFormatSymbols();
if (dfs != null) {
StringBuffer sb = new StringBuffer();
sb.append(dfs.getCurrencySymbol());
sb.append(dfs.getDecimalSeparator());
sb.append(dfs.getGroupingSeparator());
sb.append(dfs.getInfinity());
sb.append(dfs.getInternationalCurrencySymbol());
sb.append(dfs.getMinusSign());
sb.append(dfs.getMonetaryDecimalSeparator());
sb.append(dfs.getNaN());
sb.append(dfs.getPercent());
sb.append('+");
specialChars = sb.toString();
}
else {
specialChars = "";
}
|
java.lang.Object | stringToValue(java.lang.String text, java.text.Format f)Invokes parseObject on f , returning
its value.
if (f == null) {
return text;
}
Object value = f.parseObject(text);
return convertValueToValueClass(value, getValueClass());
|
private java.lang.Object | toggleExponentSign(int offset, char aChar)Invoked to toggle the sign of the exponent (for scientific
numbers).
String string = getFormattedTextField().getText();
int replaceLength = 0;
int loc = getAttributeStart(NumberFormat.Field.EXPONENT_SIGN);
if (loc >= 0) {
replaceLength = 1;
offset = loc;
}
if (aChar == getPositiveSign()) {
string = getReplaceString(offset, replaceLength, null);
}
else {
string = getReplaceString(offset, replaceLength,
new String(new char[] { aChar }));
}
return stringToValue(string);
|
private java.lang.Object | toggleSign(boolean positive)Invoked to toggle the sign. For this to work the value class
must have a single arg constructor that takes a String.
Object value = stringToValue(getFormattedTextField().getText());
if (value != null) {
// toString isn't localized, so that using +/- should work
// correctly.
String string = value.toString();
if (string != null && string.length() > 0) {
if (positive) {
if (string.charAt(0) == '-") {
string = string.substring(1);
}
}
else {
if (string.charAt(0) == '+") {
string = string.substring(1);
}
if (string.length() > 0 && string.charAt(0) != '-") {
string = "-" + string;
}
}
if (string != null) {
Class valueClass = getValueClass();
if (valueClass == null) {
valueClass = value.getClass();
}
try {
Constructor cons = valueClass.getConstructor(
new Class[] { String.class });
if (cons != null) {
return cons.newInstance(new Object[]{string});
}
} catch (Throwable ex) { }
}
}
}
return null;
|
private boolean | toggleSignIfNecessary(javax.swing.text.DocumentFilter$FilterBypass fb, int offset, char aChar)Will change the sign of the integer or exponent field if
aChar is the positive or minus sign. Returns
true if a sign change was attempted.
if (aChar == getMinusSign() || aChar == getPositiveSign()) {
NumberFormat.Field field = getFieldFrom(offset, -1);
Object newValue;
try {
if (field == null ||
(field != NumberFormat.Field.EXPONENT &&
field != NumberFormat.Field.EXPONENT_SYMBOL &&
field != NumberFormat.Field.EXPONENT_SIGN)) {
newValue = toggleSign((aChar == getPositiveSign()));
}
else {
// exponent
newValue = toggleExponentSign(offset, aChar);
}
if (newValue != null && isValidValue(newValue, false)) {
int lc = getLiteralCountTo(offset);
String string = valueToString(newValue);
fb.remove(0, fb.getDocument().getLength());
fb.insertString(0, string, null);
updateValue(newValue);
repositionCursor(getLiteralCountTo(offset) -
lc + offset, 1);
return true;
}
} catch (ParseException pe) {
invalidEdit();
}
}
return false;
|