【发布时间】:2016-10-15 00:57:06
【问题描述】:
我有一个 Jtable,其中一列显示价格,应该是可编辑的。但是每当我尝试更新单元格值时,都会出现异常:
java.lang.ClassCastException: java.lang.Double cannot be cast to java.lang.String
我的产品型号如下:
public class Product{
private double price;
private String name;
private Icon pic;
public Product(String name, double price){
this.name= name;
this.price = price;
}
public void setPrice(double price){
this.price = price;
}
//other getters and setters
}
在我扩展 AbstractTableModel 的自定义类中:
private ArrayList<Product> products;
//constructor and other methods
public void setValueAt(Object val, int row, int col) {
if (col == 2){
try{
double price = Double.parseDouble((String)val);
products.get(row).setPrice(price);
}
catch(Exception e){
}
fireTableCellUpdated(row, col);
}
}
public Class<?> getColumnClass(int c) {
return getValueAt(0, c).getClass();
}
@Override
public Object getValueAt(int rowNo, int column) {
Product item = products.get(rowNo);
switch(column){
case 0: return item.getPic();
case 1: return item.getName();
case 2: return item.getPrice();
default: return null;
}
}
我应该将价格更改为字符串吗?有没有其他正常的方法可以做到这一点?如果我删除 getColumnClass 覆盖价格更改,但我无法显示产品图片,所以这不是解决方案。
【问题讨论】:
-
请分享您的
getValueAt方法。 -
为什么会有双倍价格 = Double.parseDouble((String)val);,顺便说一句 DefaulttTableCellEditor 可以重新调整对象,这种形式的问题(基于您问题中的描述和代码)不是可以回答,或者回答太宽泛,很多时候在这里类似的问题......
-
@rdonuk 我更新了代码。 mKorbel 不是用户键入的所有内容,只是我需要解析为双精度的字符串值?
-
尝试使用 Double 代替原始类型 double 怎么样?和(String)val,试着把它改成String.valueOf(val)
-
@mKorbel 哇,删除这个 double price = Double.parseDouble((String)val) 并像这样设置它: double price = (double)val 就像一个魅力。请发表您的评论作为答案,以便我标记它
标签: java swing numbers jtable tablecelleditor