2009-07-06 77 views
0

我需要制作自定义文本字段,该字段将根据本地格式化方式格式化数值。所以我做了一个CLAS:JFormattedTextField中的IllegalArgumentException

public class NumberTextField extends JFormattedTextField 
{... 

构造看起来像这样:

public NumberTextField() 
    { 

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

    this.setFormatter(formater);  
    } 

它与结束:

由于谷歌无法提供的东西有用,我想看看你能说些什么呢?也许它没有价值,以应付 - 我试图把在构造this.setValue(new Double(0.0d));this.setText("0"); - 它并没有帮助..

回答

1

(每低于我的意见):子类JFormattedTextField,并呼吁保护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); 
    } 
} 
+0

nope ...尝试了你的代码,复制粘贴它,仍然是同样的错误。使用BlankAsNullNumberFormatter(Class <?extends Number> numberKlazz)实例化它,所以实际上我不知道它是否具有格式,也会尝试检查那个。 – 2009-07-06 09:24:30