У меня есть JTable, где я ввожу некоторые значения. Это функция слушателя, чтобы узнать, были ли внесены какие-либо изменения в значения, чтобы я мог их обновить. Значения должны иметь указанный формат (#. ###), поэтому я делаю это исправление для округления числа с плавающей запятой до 3 десятичных знаков, если клиент вводит больше 3.
private class CambioTablaPretratamientoListener implements TableModelListener{
public void tableChanged(TableModelEvent e){
try{
if(enviarDatosADispositivo){
TableModel model = (TableModel)e.getSource();
float value = Float.parseFloat((String)model.getValueAt(e.getLastRow(), 1));
DecimalFormat dec = new DecimalFormat("#.###");
String aux = dec.format(value);
if(model.getValueAt(e.getLastRow(), 1).equals(aux))
return;
else
model.setValueAt(aux, e.getLastRow(), 1);
value = Float.parseFloat(aux);
String nombreAtributo = (String)model.getValueAt(e.getLastRow(), 0);
nodoAModificar.setPretratamientUserParameter(nombreAtributo, value);
}
}catch(BusinessException ex){
ex.printStackTrace();
}
}
}
Сначала кажется, что код работает, потому что он округляется, а число появляется в таблице, но значение не обновляется. Я думаю, что я делаю что-то не так с DecimalFormat, потому что, если я оставлю функцию, как эта, она работает:
private class CambioTablaPretratamientoListener implements TableModelListener{
public void tableChanged(TableModelEvent e){
try{
if(enviarDatosADispositivo){
TableModel model = (TableModel)e.getSource();
float value = Float.parseFloat((String)model.getValueAt(e.getLastRow(), 1));
String nombreAtributo = (String)model.getValueAt(e.getLastRow(), 0);
nodoAModificar.setPretratamientUserParameter(nombreAtributo, value);
}
}catch(BusinessException ex){
ex.printStackTrace();
}
}
}
И, наконец,