如何在列类为float或double时使表格单元格为空

时间:2013-08-10 13:57:04

标签: java swing jtable tablecelleditor

我有JTable哪个模型已扩展为AbstractTableModel。它有4列。前两列包含字符串,最后两列包含双类型数据。当数据为空时,最后2列显示0.0;

但是当值为null或0时我想将其显示为空白;当我编辑单元格并输入任何数值时,它将设置精确点的双数据类型值。

col1 || col2 || col3 || col4 
-----------------------------
aaa  || a1  || 250.00||
bb   || b1  ||       || 10.5
============================

当columnIndex为3和4时,解决方案可能是在getValueAt(int rowIndex, int columnIndex)方法中更改并返回“”但是它会产生另一个问题。当我编辑单元格时,它返回String值,并且需要使用setValueAt(Object value, int row, int col)

解析字符串值以Double.parseDouble(value.toString());方法加倍

但我认为将字符串值解析为Double并不明智或正确;我认为setCellEditor可能是一个很好的解决方案。但是我无法理解如何将单元格编辑器设置为双数据类型。

mytable.getColumnModel().getColumn(3).setCellEditor(???);

你能给出任何解决方案。

2 个答案:

答案 0 :(得分:3)

您需要更改CellRenderer,而不是CellEditor。

请阅读“概念:编辑和渲染器”:

http://docs.oracle.com/javase/tutorial/uiswing/components/table.html

答案 1 :(得分:0)

最后我可以使用以下代码解决我的问题。

@Override
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
        Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
        setHorizontalAlignment(SwingConstants.RIGHT);
        if (value.equals(Double.valueOf(0))){
            super.setValue("");        
        }
        else {
            DecimalFormat numberFormat = new DecimalFormat("#,##0.00;(#,##0.00)");        
            Number num = (Number)value;
            super.setValue(numberFormat.format(num));
        }

        return c;
    }