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
Post a Comment