实时用户输入的jFormatedTextField货币格式

时间:2016-09-02 10:53:13

标签: java swing format currency jformattedtextfield

这是我的代码:

// create the formatters, default, display, edit
NumberFormatter defaultFormatter = new NumberFormatter(new DecimalFormat("#.##"));
NumberFormatter displayFormatter = new NumberFormatter(new DecimalFormat("#.##€"));
NumberFormatter editFormatter = new NumberFormatter(new DecimalFormat("#.##")); 
// set their value classes
defaultFormatter.setValueClass(Double.class);
displayFormatter.setValueClass(Double.class);
editFormatter.setValueClass(Double.class);   
// create and set the DefaultFormatterFactory
DefaultFormatterFactory valueFactory = new DefaultFormatterFactory(defaultFormatter,displayFormatter,editFormatter);
jFormattedTextField4.setFormatterFactory(valueFactory);
jFormattedTextField1.setFormatterFactory(valueFactory);

当用户输入带点的值时会出现问题,例如(2.33),格式化文本字段更改为(2€)并且这不是假设,因为用户输入了有效值。 如果用户输入(2,33)结果是(2,33)并且再次没有假设,因为应该是(2.33)

基本上我总是想要格式(X.XX)。 例如:

输入与我想要的: 2-2.00€/ 2,22-2.22€/ 312.54-312.54€/ 432-432.00€/ 2,2-2.20€

编辑:一周前,这是有效的,在我将这个项目安装到另一个窗口后,问题出现了。这时我有一个葡萄牙语键盘。该问题可能涉及任何窗口或系统属性吗?

编辑:我仍在寻求帮助。任何人??? :■

1 个答案:

答案 0 :(得分:1)

  • 你必须使用getCurrencyInstance(),而不是普通的DecimalFormat,请确保你的描述中出现问题(" one week ago this was working, after i mount this project in another windows the issue appear....")

    < / LI>
  • 和/或您可以定义受Locale

  • 限制的格式化程序
  • 我不会使用CurrencyInstance,对我来说不是很好,有可能强制使用真正的简写名称(例如Euro = {{1 } {}使用EUR和字符符号位置NavigationFilter / setDotcode example by @camickr

  • 这里有简单的标准,默认是您需要的,

enter image description here

moveDot