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
einen eigenen CellRenderer schreiben: http://www.exampledepot.com/egs/javax.swing.table/CustRend.html
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!
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.