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

Gast #1602536
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
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
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
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

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.