Java 在jtable的双精度单元格中输入空白值

Java 在jtable的双精度单元格中输入空白值,java,swing,jtable,Java,Swing,Jtable,我有自定义的表模型,也有自定义的jtable中有问题的双列的呈现。我想选择在双栏中保留空白单元格。事实上,当我把它留空的时候,写出来的东西是空的。默认情况下,该选项位于另一个字符串列中,但如果我将其保留为空,则会引发一些异常。我怎样才能做到 编辑:这是错误 Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at table.MyTableModel.setValueAt(MyTableModel.j

我有自定义的表模型,也有自定义的jtable中有问题的双列的呈现。我想选择在双栏中保留空白单元格。事实上,当我把它留空的时候,写出来的东西是空的。默认情况下,该选项位于另一个字符串列中,但如果我将其保留为空,则会引发一些异常。我怎样才能做到

编辑:这是错误

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at table.MyTableModel.setValueAt(MyTableModel.java:62)
    at javax.swing.JTable.setValueAt(JTable.java:2710)
    at javax.swing.JTable.editingStopped(JTable.java:4712)
下面是MyTaleModel中的代码

public void setValueAt(Object value, int row, int col) {

    data.get(row)[col] = value;
    fireTableCellUpdated(row, col);
}
这是数据:
静态数组列表数据

这是列渲染器

public class ColumnRenderer extends DefaultTableCellRenderer {

int precision = 0;
Number numberValue;
NumberFormat nf;

public ColumnRenderer(int p_precision) {
    super();
    setHorizontalAlignment(SwingConstants.RIGHT);
    precision = p_precision;
    nf = NumberFormat.getNumberInstance();
    nf.setMinimumFractionDigits(p_precision);
    nf.setMaximumFractionDigits(p_precision);
}

@Override
public void setValue(Object value) {
    if ((value != null) && (value instanceof Number)) {
        numberValue = (Number) value;
        value = nf.format(numberValue.doubleValue());
    }
    super.setValue(value);
}

我认为您应该使用包装类
Double
来代替
Double
,因为原语类型不能指定为
null
,但包装类型可以。这就是原因,其他具有不同类型的单元格(例如,
String
作为
String
工作)也可以分配给
null

,在自定义单元格渲染器中,您需要考虑空值实际上是什么。您可以从表模型或预定义值(例如0)返回
null

如果您的模型实际上是return
Double
,那么它就变得相当容易了

在自定义单元渲染中,需要检查“空”状态


这不是一个真正的答案,但太长了,无法评论

如果只想显示
Double
实例,则不需要自定义渲染器。默认渲染器能够处理这种情况。唯一的先决条件是在
TableModel
中为
getColumnClass
方法返回正确的类

您可以看到,在源代码中,默认渲染器已经足够了。快速复制粘贴:

static class DoubleRenderer extends NumberRenderer {
    NumberFormat formatter;
    public DoubleRenderer() { super(); }

    public void setValue(Object value) {
        if (formatter == null) {
            formatter = NumberFormat.getInstance();
        }
        setText((value == null) ? "" : formatter.format(value));
    }
}

所以你很可能做了一些你没有告诉我们的错误。发布堆栈跟踪和相关代码以获得更好的答案。

“某些”异常?引发发生在特定位置的特定异常。它包含一个特定的消息,打算阅读。如果您不了解堆栈跟踪,至少向我们展示它以及相应的代码。由
setValue
引起的
NullPointerException
应该与单元格渲染器无关,它与数据/模型/编辑器有关。您对XxxTableModel有问题,与渲染器没有某种关系,
static class DoubleRenderer extends NumberRenderer {
    NumberFormat formatter;
    public DoubleRenderer() { super(); }

    public void setValue(Object value) {
        if (formatter == null) {
            formatter = NumberFormat.getInstance();
        }
        setText((value == null) ? "" : formatter.format(value));
    }
}