java - JTable cell editor number format -


i need show numbers in jtable exact 2 decimal places. accomplish have created custom cell editor as:

public class numbercelleditor extends defaultcelleditor {     public numbercelleditor(){         super(new jformattedtextfield());     }      public component gettablecelleditorcomponent(jtable table, object value, boolean isselected, int row, int column) {         jformattedtextfield editor = (jformattedtextfield) super.gettablecelleditorcomponent(table, value, isselected, row, column);          if (value!=null){             decimalformat numberformat = new decimalformat("#,##0.00;(#,##0.00)");             editor.setformatterfactory(new javax.swing.text.defaultformatterfactory(new javax.swing.text.numberformatter(numberformat)));             number num = (number) value;               string text = numberformat.format(num);             editor.sethorizontalalignment(swingconstants.right);             editor.settext(text);         }         return editor;     } } 

this cell editor works perfect english locale dot used decimal point. in german locale, doesn't accept values comma decimal point. please let me know there problem in code. in advance.

edit: here how got working:

public class numbercelleditor extends defaultcelleditor { public numbercelleditor(){     super(new jformattedtextfield()); }  @override public component gettablecelleditorcomponent(jtable table, object value, boolean isselected, int row, int column) {     jformattedtextfield editor = (jformattedtextfield) super.gettablecelleditorcomponent(table, value, isselected, row, column);      if (value instanceof number){         locale mylocale = locale.getdefault();           numberformat numberformatb = numberformat.getinstance(mylocale);         numberformatb.setmaximumfractiondigits(2);         numberformatb.setminimumfractiondigits(2);         numberformatb.setminimumintegerdigits(1);          editor.setformatterfactory(new javax.swing.text.defaultformatterfactory(                         new numberformatter(numberformatb)));          editor.sethorizontalalignment(swingconstants.right);         editor.setvalue(value);     }     return editor; }  @override public boolean stopcellediting() {     try {         // try value         this.getcelleditorvalue();         return super.stopcellediting();     } catch (exception ex) {         return false;     }  }  @override public object getcelleditorvalue() {     // content of textfield     string str = (string) super.getcelleditorvalue();     if (str == null) {         return null;     }      if (str.length() == 0) {         return null;     }      // try parse number     try {         parseposition pos = new parseposition(0);         number n = numberformat.getinstance().parse(str, pos);         if (pos.getindex() != str.length()) {             throw new parseexception(                     "parsing incomplete", pos.getindex());         }          // return instance of column class         return new float(n.floatvalue());      } catch (parseexception pex) {         throw new runtimeexception(pex);     } } } 

use locale advantage:

  //locale mylocale = locale.germany;  //... or better, current locale    locale mylocale = locale.getdefault(); // better still    numberformat numberformatb = numberformat.getinstance(mylocale);   numberformatb.setmaximumfractiondigits(2);   numberformatb.setminimumfractiondigits(2);   numberformatb.setminimumintegerdigits(1);    edit.setformatterfactory(new javax.swing.text.defaultformatterfactory(                     new numberformatter(numberformatb))); 

Comments

Popular posts from this blog

c# - SharpSVN - How to get the previous revision? -

c++ - Is it possible to compile a VST on linux? -

url - Querystring manipulation of email Address in PHP -