3

我有一个 GWT 项目,我需要在其中手动指定货币、数字和日期时间格式。这些自定义包括指定货币符号、分组分隔符、小数分隔符、负数格式等。实现这一点的最佳方法是什么?

我应该使用 GWT NumberFormat类吗?NumberFormat 广泛使用 GWT 国际化结构,如Constants接口等。因此,如果您指定自定义数字格式掩码,它仍将查看当前语言环境并使用那些货币符号、十进制符号和千位分隔符,如后期绑定和国际化的“NumberFormat”实例。

我的问题是:你将如何做到这一点?你会重新实现NumberFormat's 的功能吗?您会从它派生并使用受保护的构造函数并将其传递给您自己创建的某种自定义NumberConstant实例吗?如何获取 i18n NumberConstants 实例,并使用它来填充您自己的实例并仅覆盖您想要的内容?

你会如何处理这个问题?

4

2 回答 2

2

我已将 NumberFormat.getFormat(String format) 用于自定义货币格式(在 $ 符号之前删除“US”)。

在我的应用程序中,我将结果放入公共常量中。我已将“格式”参数存储在 i18n 资源包以及所有 UI 特定字符串中。

于 2009-08-27T17:28:56.767 回答
0
公共类 MyNumberFormat 扩展 NumberFormat{

    私有静态 CurrencyCodeMapConstants currencyCodeMapConstants = GWT.create(CurrencyCodeMapConstants.class);

    protected MyNumberFormat(字符串模式,CurrencyData cdata,
            布尔用户供应模式){
        超级(模式,cdata,userSuppliedPattern);     
    }

    公共静态 NumberFormat getCurrencyFormat(String currencyCode) {     
        返回新的 MyNumberFormat(defaultNumberConstants.currencyPattern(),
            查找货币(货币代码),假);
      }

      私人静态货币数据查找货币(字符串货币代码){
        CurrencyData currencyData = CurrencyList.get().lookup(currencyCode);

        映射currencyMap = currencyCodeMapConstants.currencyMap();       

        字符串代码 = currencyData.getCurrencyCode();
        //字符串符号 = currencyData.getCurrencySymbol();
        字符串符号 = currencyMap.get(currencyCode);
        int fractionDigits = currencyData.getDefaultFractionDigits();
        字符串portableSymbol = currencyData.getPortableCurrencySymbol();       

        返回到CurrencyData(代码,符号,fractionDigits,portableSymbol);
      }

      public static native CurrencyData toCurrencyData(String code, String symbol, int fractionDigits, StringportableSymbol) /*-{
        返回[代码,符号,fractionDigits,portableSymbol];
      }-*/;
}

我可以在 GXT 网格中使用

        column = new ColumnConfig("precioventa", constants.modeloPrendaPrecioVenta(), 100);
        column.setAlignment(Horizo​​ntalAlignment.RIGHT);        
        column.setNumberFormat(MyNumberFormat.getCurrencyFormat("PEN"));        
        列。添加(列);
于 2011-08-08T16:14:42.437 回答