Comment stocker des valeurs arrondies dans une table au lieu de simplement les afficher comme arrondi

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

Question

J'ai une table dans laquelle j'ai besoin que les chiffres soient arrondis à 4 décimales.J'ai réussi à le faire, mais le problème est que lorsque la table affiche les valeurs arrondies, les valeurs réelles stockées ne sont pas les valeurs arrondies (j'utilise BigDecimal parce que je veux pouvoir contrôler le comportement de l'arrondi des cellules).Lorsque j'imprimer les valeurs de cellule, je reçois les numéros avec plus de 4 valeurs décimales, même si les valeurs figurent dans la table sont les valeurs arrondies.J'ai écrit mes propres éditeurs et rendantx comme suit:

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'est-ce que je fais mal de sorte que les valeurs stockées dans le modèle de table ne soient pas les valeurs arrondies?Merci.

Était-ce utile?

La solution

J'ai réussi à résoudre le problème en remplaçant la méthode getcelleditorValue () dans la classe d'éditeur de cellules comme telle:

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top