在jtable中输入双精度单元格中的空白值
我有自定义表模型,并且还为jtable中有问题的双列自定义渲染。我想要在双列中留下空白单元格的选项。事实上,当我将它留空时,写入为空。这个选项在另一个字符串列中是默认的,但是在这里如果我把它留空,就会抛出一些异常。我如何做到这一点?在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);
}
这是数据的代码:static ArrayList<Object[]> data
,这是列渲染
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
。
否 - 出什么问题实际使用表单元格渲染器 – MadProgrammer
在您定制的单元格渲染器中,您需要考虑实际是一个空值。您可以从表模型或预定义值(例如0)返回null
。
如果模型实际上是返回Double
则变得容易得多......
在你自定义单元格渲染,你将需要为“空”状态的检查......
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
if (value == null) {
value = "";
} else {
// Carry on as normal...
}
return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
}
不是一个真正的答案,但太长的评论。
如果您只想显示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));
}
}
所以你很可能做错你不告诉我们。发布堆栈跟踪和相关代码以获得更好的答案。
请参阅OP的上一个问题 – mKorbel
“有些”异常?发生在特定位置的特定异常被抛出。它包含一个特定的消息,旨在被读取。如果您不了解堆栈跟踪,至少要显示它,并附上相应的代码。 –
由'setValue'引起的'NullPointerException'应该与您的单元格渲染器无关,它与您使用XxxTableModel时的数据/模型/编辑器 – MadProgrammer
有关,与渲染器无关, – mKorbel