Hi Leute,
ich hab folgende Situtation, dass ich über einen TableModelListener den Prozentwert zu einem Betrag ausrechne und umgekehrt und diese Werte dann in das TableModel setze. Problem bei der geschichte ist, dass wenn man es nicht abfängt eine endlosschleife entsteht. Hab es bisher so gemacht dass ich die ausgerechneten Werte mit denen im Model vergleiche und erst bei unstimmigkeit die neuen in das Model eintrage. Aufgrund von rundungfehlren unfktioniert dies nicht immer. Altnetaiv würde mir noch ein statisches Flag am Anfang der Methode einfallen wie unten im Code aufgeführt oder die TM-Listener am Anfang entfernen und am Ende wieder neu draufsetzen.
Gruß Jan
ich hab folgende Situtation, dass ich über einen TableModelListener den Prozentwert zu einem Betrag ausrechne und umgekehrt und diese Werte dann in das TableModel setze. Problem bei der geschichte ist, dass wenn man es nicht abfängt eine endlosschleife entsteht. Hab es bisher so gemacht dass ich die ausgerechneten Werte mit denen im Model vergleiche und erst bei unstimmigkeit die neuen in das Model eintrage. Aufgrund von rundungfehlren unfktioniert dies nicht immer. Altnetaiv würde mir noch ein statisches Flag am Anfang der Methode einfallen wie unten im Code aufgeführt oder die TM-Listener am Anfang entfernen und am Ende wieder neu draufsetzen.
Gruß Jan
Java:
public void updateBetragProzentual(int row, Integer editedCol) {
if (listenerFlag) {
listenerFlag = true;
int colBrutto = findColumn("Bruttobetrag");
int colProz = findColumn("Gezahlt Prozentual");
int colGez = findColumn("Gezahlter Betrag");
Object gezValue = getValueAt(row, colGez);
Object prozentValue = getValueAt(row, colProz);
Object bruttoValue = getValueAt(row, colBrutto);
if (bruttoValue != null && prozentValue != null
&& editedCol != null && editedCol == colProz) {
BigDecimal res = ((BigDecimal) bruttoValue)
.multiply((BigDecimal) prozentValue);
res = res.divide(new BigDecimal(100), 2, RoundingMode.HALF_UP);
if (gezValue == null
|| res.compareTo((BigDecimal) gezValue) != 0)
this.setValueAt(res, row, colGez);
} else if (bruttoValue != null && gezValue != null
&& editedCol != null && editedCol == colGez) {
BigDecimal res = new BigDecimal(100)
.multiply(((BigDecimal) gezValue));
res = res.divide((BigDecimal) bruttoValue, 2,
RoundingMode.HALF_UP);
if (prozentValue == null
|| res.compareTo((BigDecimal) prozentValue) != 0)
this.setValueAt(res, row, colProz);
}
listenerFlag = false;
}
}