Java: JTable Anzeigewert runden, eig. Wert aber nicht runden

Gast #1602536
Lesenswert?

Hallo,

hab in Java ein JTable, die Werte werden als Double dargestellt. Mit 
einer Rechenoperation erhöhe ich die Werte um einen gewissen 
Prozentsatz. Dabei kann es passieren, das eine Zahl mal 4 - 5 
Nachkommastellen hat. Besteht die Möglichkeit den Wert in der Anzeige zu 
runden (auf zwei Nachkommastellen), ohne dabei den eig. Wert zu 
verändern um bei der nächsten Rechenoperation wieder mit 4 -5 
Nachkommastellen weiterzurechnen?!

LG
Christian
Gast #1602547
Lesenswert?

Danke um das Thema komm ich wohl im meinem Leben nicht herum! Hatte 
gestern schon was mit dem CellRender versucht hat nicht hingehauen...und 
da war ich sehr frustiert....aber den Link kannte ich noch nicht! Ich 
zieh den mir mal rein! Danke für die schnelle Antwort!
Gast #1602661
Lesenswert?

Hi Christian,
das geht auch einfacher: implementiere in Deiner Klasse, die die Daten 
zur Verfügung stellt, eine ReadOnly-Eigenschaft (getter-Methode), die 
den gerundeten Wert zurückliefert und zeige diesen in der Tabelle an.

Grüße
Markus
Persönliche Seite #1603046
Lesenswert?

Es geht auch einfacher und besser!
Du solltest nicht auf dem JTable direkt arbeiten, sondern ein eigenes 
TableModel implementieren.
1
import java.text.NumberFormat;
2
import javax.swing.table.AbstractTableModel;
3

4
public class DoubleModel extends AbstractTableModel {
5

6
    private static final long  serialVersionUID = 8564625022160734884L;
7

8
    private final double[][]   data;
9

10
    private final NumberFormat formater;
11

12
    private final int          rows;
13

14
    private final int          cols;
15

16
    public DoubleModel(int rows, int cols) {
17
        this.rows = rows;
18
        this.cols = cols;
19
        data = new double[rows][cols];
20
        formater = NumberFormat.getInstance();
21
        formater.setMaximumIntegerDigits(2);
22
    }
23

24
    @Override
25
    public int getColumnCount() {
26
        return cols;
27
    }
28

29
    @Override
30
    public int getRowCount() {
31
        return rows;
32
    }
33

34
    @Override
35
    public Object getValueAt(int rowIndex, int colIndex) {
36
        return formater.format(data[rowIndex][colIndex]);
37
    }
38

39
    public double getData(int rowIndex, int colIndex) {
40
        return data[rowIndex][colIndex];
41
    }
42

43
    public void setData(int rowIndex, int colIndex, double newVal) {
44
        data[rowIndex][colIndex] = newVal;
45
        fireTableCellUpdated(rowIndex, colIndex);
46
    }
47

48
}
Auf diesem Modell kannst du dann auch arbeiten, man kann das ganze jetzt 
natürlich beliebig erweitert/verbessert werden.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren