0

我有一个JTable哪个模型扩展到AbstractTableModel. 它有 4 列。前两列保存字符串,后两列保存双精度数据。数据为 Null 时,最后 2 列显示 0.0;

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

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

一个解决方案可能是getValueAt(int rowIndex, int columnIndex)在 columnIndex 为 3 和 4 时更改方法并返回“”。但这会产生另一个问题。当我编辑单元格时,它返回字符串值并需要将字符串值解析为加倍的setValueAt(Object value, int row, int col)方法Double.parseDouble(value.toString());

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

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

你能给出任何解决方案。

4

2 回答 2

3

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

在此处阅读“概念:编辑器和渲染器”:

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

于 2013-08-10T14:00:41.220 回答
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;
    }
于 2013-08-11T06:02:09.040 回答