mikrocontroller.net

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


Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hansilein (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
einen eigenen CellRenderer schreiben:
http://www.exampledepot.com/egs/javax.swing.table/...

Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

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

public class DoubleModel extends AbstractTableModel {

    private static final long  serialVersionUID = 8564625022160734884L;

    private final double[][]   data;

    private final NumberFormat formater;

    private final int          rows;

    private final int          cols;

    public DoubleModel(int rows, int cols) {
        this.rows = rows;
        this.cols = cols;
        data = new double[rows][cols];
        formater = NumberFormat.getInstance();
        formater.setMaximumIntegerDigits(2);
    }

    @Override
    public int getColumnCount() {
        return cols;
    }

    @Override
    public int getRowCount() {
        return rows;
    }

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

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

    public void setData(int rowIndex, int colIndex, double newVal) {
        data[rowIndex][colIndex] = newVal;
        fireTableCellUpdated(rowIndex, colIndex);
    }

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.