Как хранить округлые значения в таблице вместо того, чтобы просто отображать их как округлые

StackOverflow https://stackoverflow.com//questions/24061770

Вопрос

У меня есть таблица, в которой мне нужны номера, которые будут округлены до 4 десятичных знаков.Но удалось сделать это, но проблема в том, что в том, что в том, что, хотя таблица отображается закругленными значениями, фактические накопленные значения не являются закругленными значениями (я использую BigDecimal, поскольку я хочу контролировать закругление клетки).Когда я печатаю значения клетки, я получаю числа с более чем 4 десятичными значениями, даже если значения, показанные в таблице, являются закругленными значениями.Я написал свои собственные редакторы и рендерры следующим образом:

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);
    }
}
.

Что я делаю неправильно таким, что хранимые значения в модели таблицы не являются закругленными значениями?Спасибо.

Это было полезно?

Решение

Мне удалось решить проблему, переопределив метод getcelleditorvalue () в классе редактора клеток как таковой:

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top