我有一个表格,其中我需要把数字四舍五入到小数点后4位。我成功地做到了这一点,但问题是,当表显示四舍五入的值时,实际存储的值并不是四舍五入的值(我使用BigDecimal是因为我希望能够控制单元格的舍入行为)。在打印单元格值时,即使表中显示的值是四舍五入的值,也会得到小数超过4个的数字。我写了我自己的编辑和渲染器如下:
class DoubleEditor4 extends DefaultCellEditor {
public DoubleEditor4() {
super(new JFormattedTextField());
}
@Override
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
JFormattedTextField editor = (JFormattedTextField) super.getTableCellEditorComponent(table, value, isSelected, row, column);
if (value!=null){
String num = (String) value;
BigDecimal num2 = new BigDecimal(num).setScale(4, BigDecimal.ROUND_HALF_UP);
String text = num2.toString();
editor.setHorizontalAlignment(SwingConstants.RIGHT);
editor.setText(text);
}
return editor;
}
}
class DoubleRenderer4 extends DefaultTableCellRenderer {
public DoubleRenderer4() {
super();
this.setHorizontalAlignment(SwingConstants.RIGHT);
}
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
value = new BigDecimal(value.toString()).setScale(4, BigDecimal.ROUND_HALF_UP);
return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column );
}
public void setValue(Object value) {
BigDecimal num2 = new BigDecimal(value.toString()).setScale(4, BigDecimal.ROUND_HALF_UP);
String text = num2.toString();
setText(text);
}
}
如果表模型中存储的值不是四舍五入的值,那么我做错了什么呢?谢谢。
发布于 2014-06-07 06:08:43
通过在单元编辑器类中重写getCellEditorValue()方法,我设法解决了这个问题:
@Override
public Object getCellEditorValue() {
Object v = super.getCellEditorValue();
BigDecimal n = new BigDecimal(v.toString()).setScale(4, BigDecimal.ROUND_HALF_UP);
return n.toString();
}
https://stackoverflow.com/questions/24061770
复制相似问题