用于inputfield的java Sencha GXT自定义货币格式
我目前正在从事一个GWT项目,我们使用Sencha GXT libs。我目前正在尝试创建一个自定义货币格式的CurrencyField。我希望自定义货币格式的一些示例:
€ 123,45
€ 98.765.432,10
€ 400,00
所以,正如你所看到的,我想要一个前缀欧元符号;货币符号和小数点之间的空格;千分之点;逗号表示小数(当然,逗号后面还有两个小数)
然而,在GXT中,似乎无法创建自己的自定义格式我知道用常规的java.text.NumberFormat
我可以做这样的事情:
NumberFormat format = NumberFormat.getCurrencyInstance();
DecimalFormatSymbols formatSymbols = new DecimalFormatSymbols();
formatSymbols.setCurrencySymbol("€");
formatSymbols.setGroupingSeparator('.');
formatSymbols.setMonetaryDecimalSeparator(',');
((DecimalFormat)format).setDecimalFormatSymbols(formatSymbols);
然而,在GXT中,com.google.gwt.i18n.client.NumberFormat
必须用于NumberField<BigDecimal>
的setFormat
-方法。我知道一些定制可以用于CurrencyData
,如下所示:
private CurrencyData createCurrencyData() {
// CurrencyData docs: http://www.gwtproject.org/javadoc/latest/com/google/gwt/i18n/client/CurrencyData.html
return new CurrencyData() {
@Override
public String getCurrencySymbol() {
return "€";
}
@Override
public String getSimpleCurrencySymbol() {
return "€";
}
@Override
public String getPortableCurrencySymbol() {
return "€";
}
@Override
public String getCurrencyCode() {
return "EUR"; // ISO4217 for this currency
}
@Override
public int getDefaultFractionDigits() {
return 2; // Amount of decimal positions
}
@Override
public boolean isSymbolPrefix() {
return true; // true to place currency symbol before the decimal
}
@Override
public boolean isSymbolPositionFixed() {
return true; // true to use the same currency symbol position regardless of locale (determined by the isSymbolPrefix-method)
}
@Override
public boolean isSpacingFixed() {
return true; // true to put a space between the currency symbol and the decimal
}
@Override
public boolean isSpaceForced() {
return true; // true to use the same spacing regardless of locale (determined by the isSpacingFixed-method)
}
@Override
public boolean isDeprecated() {
return false;
}
};
}
我现在是这样使用的:
NumberField<BigDecimal> currencyField = new NumberField<BigDecimal>(
new NumberPropertyEditor.BigDecimalPropertyEditor());
currencyField.setFormat(NumberFormat.getCurrencyFormat(createCurrencyData()));
然而,有两个问题:
- 它没有完全定制我想要的方式。它现在接受如下输入:
€123,456.78
;而不是€ 123.456,78
(同样,尽管CurrencyData#isSpacingForced
显然应该用于货币符号和十进制之间的空格,但它对NumberField
不起作用。)李> - 当我只是键入一个像
400
这样的常规数字时,它会给出一个错误,而不是自动格式化用户输入:400 does not have either positive or negative affixes is not a valid number
李>
# 1 楼答案
我们所做的改变:
现在,我们将荷兰语区域设置放在
.gwt.xml
文件中:我们使用如下自定义格式:
使用CustomNumberFormat类,如下所示:
现在我们得到以下结果: