0
我目前正在使用Sencha GXT库的GWT项目。我目前正在尝试使用自定义货币格式创建CurrencyField。以下是我想要的自定义货币格式的一些示例:Sencha GXT输入字段的自定义货币格式
€ 123,45
€ 98.765.432,10
€ 400,00
因此,正如您所看到的,我想要一个前缀euro-sign;货币符号和小数之间的空格;一千个分离器的点;和小数点的逗号(当然还有逗号后面的两个小数点)。
但是在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
。