2011-12-22 25 views
0

我有許多帶有數字數據的JFormattedTextdield。我已經使用了DecimalFormat,InternationalFormatter,DocumentListener,並且還使用CaretPositionListener進行了嘗試。Java:JFormattedTextField更改setGroupingUsed()on focusLost&focusGained

我面對的唯一問題就是當號碼輸入增長和分組字符進入之間時的插入位置。

如何動態設置onGocusLost上各個jformattedtextfields的DecimalFormat的setGroupingUsed()的焦點已着色&。

任何意見或建議....

更新代碼&問題: 當我嘗試輸入 「12345」,就加入 「1234」 逗號出現的 「1,234」。這使3 &後4之間,而不是4的格式代碼,我用它來插入記號:

DecimalFormat numberFormat = (DecimalFormat) DecimalFormat.getNumberInstance(); 
    numberFormat.setMaximumFractionDigits(2); 
    numberFormat.setMinimumFractionDigits(2); 
    numberFormat.setRoundingMode(RoundingMode.HALF_UP); 

    final InternationalFormatter formatter = new InternationalFormatter(numberFormat); 
    formatter.setAllowsInvalid(false); 
    formatter.setMinimum(0.00); 
    formatter.setMaximum(999999999.99); 

    return formatter; 

這是我作爲一個自定義的JFormattedTextField SOLUTION實現。你有什麼更好的辦法來處理分組字符,而輸入值,所以只需插入位置仍然正確:

public void focusGained(FocusEvent e) { 
    if (numberFormat.isGroupingUsed()) { 
     Object o = this.getValue(); 
     numberFormat.setGroupingUsed(false); 
     formatter.setFormat(numberFormat); 
     this.setFormatterFactory(new AbstractFormatterFactoryImpl()); 
     this.setValue(o); 
     this.setText(o.toString()); 
    } 
} 

public void focusLost(FocusEvent e) { 
    try { 
     this.commitEdit(); 
    } catch (ParseException ex) { 
     //Logger.getLogger(NumberFormattedTextField.class.getName()).log(Level.SEVERE, null, ex); 
    } 
    Object o = this.getValue(); 
    //System.out.println("focusLost : getValue = " + o); 
    numberFormat.setGroupingUsed(true); 
    formatter.setFormat(numberFormat); 
    this.setFormatterFactory(new AbstractFormatterFactoryImpl()); 
    this.setValue(o); 
    this.setText(o.toString()); 
    //System.out.println("focusLost : Text Set = " + o.toString()); 
} 
+3

爲了儘快提供更好的幫助,請發佈[SSCCE](http://sscce.org/)。 – 2011-12-22 11:14:28

回答

0

感謝,

我通過創建,管理一切,我需要一個自定義的文本框來解決。任何改進建議。問題上面添加了代碼。

+0

每一個更好的AutoCompleted JComboBox/JtexField已經實現了set&moveCaret,那麼沒有關於JTextField,但關於從JComboBox中提取JTextComponent – mKorbel 2011-12-23 11:32:25

+0

@mKorbel,問題是在輸入文本時。由於分組的「,」出現,所以插入符號是內部1位數字。 focusGained時將分組設置爲false,並在focusLost時將其恢復爲true。這幫助了我。對於你所提到的,他們有沒有比我更好的解決方案? – Tvd 2011-12-23 11:56:47

+0

檢查自動完成的JComboBox/JtexField,你可以放50pcs,每個記住最後一個選擇卡雷,但在另一方面是太難回答你的問題,因爲你談論無級代碼的高等級workaound,當然這裏有一些優秀的Swing編碼器,但沒有代碼,沒有回答:-) – mKorbel 2011-12-23 12:00:53