Forum: PC-Programmierung Java: JTable Anzeigewert runden, eig. Wert aber nicht runden


von Christian (Gast)


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

von Hansilein (Gast)


Lesenswert?


von Christian (Gast)


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!

von Markus (Gast)


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

von Läubi .. (laeubi) Benutzerseite


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.