Pregunta

Tengo una tabla en la que necesito que los números se redujeran a 4 lugares decimales.He logrado hacer eso, pero el problema es que si bien la tabla está mostrando los valores redondeados, los valores reales almacenados no son los valores redondeados (uso bigdecimal porque quiero poder controlar el comportamiento de redondeo de las celdas).Cuando imprimo los valores celulares, obtengo los números con más de 4 valores decimales, aunque los valores que se muestran en la tabla son los valores redondeados.Escribí mis propios editores y renderizadores de la siguiente manera:

class DoubleEditor4 extends DefaultCellEditor {

    public DoubleEditor4() {
        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!=null){
            String num = (String) value;
            BigDecimal num2 = new BigDecimal(num).setScale(4, BigDecimal.ROUND_HALF_UP);
            String text = num2.toString();
            editor.setHorizontalAlignment(SwingConstants.RIGHT);
            editor.setText(text);
        }
        return editor;
    }   
}

class DoubleRenderer4 extends DefaultTableCellRenderer {
    public DoubleRenderer4() { 
        super();
        this.setHorizontalAlignment(SwingConstants.RIGHT);
    }

    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
        value = new BigDecimal(value.toString()).setScale(4, BigDecimal.ROUND_HALF_UP);
        return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column );
    }

    public void setValue(Object value) {
        BigDecimal num2 = new BigDecimal(value.toString()).setScale(4, BigDecimal.ROUND_HALF_UP);
        String text = num2.toString();
        setText(text);
    }
}

¿Qué estoy haciendo lo incorrecto de tal que los valores almacenados en el modelo de tabla no son los valores redondeados?Gracias.

¿Fue útil?

Solución

Me las arreglé para resolver el problema anulando el método GetCelleditorValue () en la clase del editor de células como tal:

@Override
public Object getCellEditorValue() {
    Object v = super.getCellEditorValue();
    BigDecimal n = new BigDecimal(v.toString()).setScale(4, BigDecimal.ROUND_HALF_UP);
    return n.toString();
}

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top