2009-07-06 71 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