CellFormatter com problemas

0 respostas
P
Tenho um problema ao editar uma célula numa JTable.O formatter funciona legal, mas ao clicar na célula para editar, ele come alguns valores: Se a célula tem o valor 0.900, ao clicar para editar, o valor passa para 0.009 só de clicar em cima! Meu cell formatter é esse:
public class FormatTableCellEditor extends AbstractCellEditor implements TableCellEditor { 
JComponent component =null; 
List<Client> lista=null;
public FormatTableCellEditor(List<Client> l){
		   super();
		   this.lista=l;		    
	}
public Component getTableCellEditorComponent(JTable table, Object value,boolean isSelected, int rowIndex, int vColIndex) {  
	 //'value' is value contained in the cell located at (rowIndex, vColIndex)  	  
	        if (isSelected) {  
	            // cell (and perhaps other cells) are selected  
	        } 
	        for(int j=0;j<lista.size();j++){
	    	     Client cadastrado=lista.get(j);
	    	     if(j==rowIndex){
	    	    	component= formatarCampo(cadastrado.getRange());
	    	     }
	        }    
	        component.setForeground(Color.BLACK);
	        component.setBackground(table.getBackground());
	        // Configure the component with the specified value  
	        ((JTextField)component).setText((String)value);
	            
	        // Return the configured component  
	        return component;  
	    }  
	  
	    // This method is called when editing is completed.  
	    // It must return the new value to be stored in the cell.  
	    public Object getCellEditorValue() {  
	        return ((JTextField)component).getText();  
	    }
       @SuppressWarnings("serial")
		public JComponent formatarCampo(int range){   
	    	JComponent component=null;
	        if(range==3){
	 	  component = new JNumberFormatField(new DecimalFormat("#,##0.000")){{setLimit(9);}};
	        }else if(range==2){
	 	  component = new JNumberFormatField(new DecimalFormat("#,##0.00")){{setLimit(8);}};
	        }else if(range==1){
	 	  component = new JNumberFormatField(new DecimalFormat("#,##0.0")){{setLimit(8);}};
	        }
	   return component;
	 }  
}
Meu model é o ObjectTableModel do Towell e eu uso assim o formatter do towell:
@Resolvable(colName = "Valor Médio" , formatter = BigDecimalFormatter.class)
	private BigDecimal valor_medio;
E minha classe de formatação:
public class BigDecimalFormatter implements Formatter {
  DecimalFormat df = new DecimalFormat ("#,##0.00");
  BigDecimal b1 =null;

  @Override
  public Object format(Object obj) {
       BigDecimal bd = (BigDecimal) obj;
       if(bd == null)
        return "0.0";
      return bd.toString();
  }
  @Override
  public String getName() {
    return "BigDecimal";
  }
  @Override
  public Object parse(Object obj) {
  	try{
  		df.setParseBigDecimal(true);
  	return df.parseObject(obj.toString());

  	}catch(Exception e){
     e.printStackTrace();
  	}
      return "0.0";
  }
}
Onde está o erro?
Criado 27 de fevereiro de 2013
Respostas 0
Participantes 1