Java摆动如何在JTable中编辑双单元格

时间:2016-06-14 10:33:38

标签: java swing numbers jtable tablecelleditor

我有一个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覆盖价格更改有效,但后来我无法显示产品Pic,所以这不是解决方案。

1 个答案:

答案 0 :(得分:1)

这一行的问题(我在你的问题中添加的问题分析了我的问题)。您只是尝试将double对象解析为String,这在java中是不可能的,因为StringDouble之间没有子父关系。

double price = Double.parseDouble((String)val); //trying to cast double as String.
  

这行代码将引发ClassCastException。因为valdouble类型的对象而不是字符串。

你可以试试这应该可行。

double price = (double)val; //try this

谢谢。