gpt4 book ai didi

java - JFormattedTextField 中的 IllegalArgumentException

转载 作者:行者123 更新时间:2023-12-01 16:11:25 28 4
gpt4 key购买 nike

我需要创建自定义文本字段,它将根据本地格式化方式格式化数值。所以我开了一个课:

public class NumberTextField extends JFormattedTextField 
{...

构造函数看起来像这样:

  public NumberTextField()
{

formater=new NumberFormatter();
formater.setAllowsInvalid( false );
nf=NumberFormat.getInstance();
formater.setFormat( nf );

this.setFormatter( formater );
}

最终结果是:

Exception in thread "main" java.lang.IllegalArgumentException: Cannot format given Object as a Number
at java.text.DecimalFormat.format(Unknown Source)
at java.text.Format.format(Unknown Source)
at javax.swing.text.InternationalFormatter.valueToString(Unknown Source)
at javax.swing.JFormattedTextField$AbstractFormatter.install(Unknown Source)
at javax.swing.text.DefaultFormatter.install(Unknown Source)
at javax.swing.text.InternationalFormatter.install(Unknown Source)
at javax.swing.JFormattedTextField.setFormatter(Unknown Source)
at hr.ikb.nasa.gui.custom.NumberTextField.<init>(NumberTextField.java:65)
at hr.ikb.nasa.gui.custom.NumberTextField.main(NumberTextField.java:35)

由于谷歌无法提供有用的东西,我想看看你对此有何评论。也许它没有任何值(value)需要处理 - 我尝试放入构造函数 this.setValue(new Double(0.0d));this.setText("0"); - 这没有帮助..

最佳答案

(根据我下面的评论):子类化 JFormattedTextField 并调用 protected setFormat 方法可能不是正确的方法。来自 API 文档:

“通常不应调用此函数,而应设置 AbstractFormatterFactory 或设置值。”

相反,我建议不要对 JFormattedTextField 进行子类化,而是使用 JFormattedTextField(AbstractFormatter) 构造函数创建一个子类。我将保留下面原始响应中的代码,以防万一它有用 - 当数值的输入是可选的时,我通常使用此格式化程序,因此空白文本字段应暗示为空。

public class BlankAsNullNumberFormatter extends NumberFormatter {
private static final long serialVersionUID = 5867546077017490042L;

public BlankAsNullNumberFormatter(Class<? extends Number> numberKlazz) {
setValueClass(numberKlazz);
}

public BlankAsNullNumberFormatter(Class<? extends Number> numberKlazz, NumberFormat format) {
super(format);
setValueClass(numberKlazz);
}

public String valueToString(Object iv) throws ParseException {
if (iv == null) {
return "";
} else {
return super.valueToString(iv);
}
}

public Object stringToValue(String text) throws ParseException {
if ("".equals(text)) {
return null;
}

return super.stringToValue(text);
}
}

关于java - JFormattedTextField 中的 IllegalArgumentException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1086108/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com