2016-06-14 9 views
1

編集可能な価格を提示する列の1つを持つJtableがあります。私は例外を取得セル値を更新しようとするたびにしかし:JTableでダブル・セルを編集するJavaスイング

java.lang.ClassCastException: java.lang.Double cannot be cast to java.lang.String 

次のように私の物のためのモデルは次のとおりです。AbstractTableModelにを拡張し、私のカスタムクラスで

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 

} 

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を表示できないため、これは解決策ではありません。

+0

あなたの 'getValueAt'メソッドを共有してください。 – rdonuk

+0

理由がある理由double Price = Double.parseDouble((String)val); btw DefaulttTableCellEditorはObjectを返すことができます。このフォームの質問(質問のコードとコードに基づいています)は答えることはできません。 、ここで何度も同じ質問... – mKorbel

+0

@rdonuk私はコードを更新しました。 mKorbelは、2倍に解析する必要がある単なる文字列値でユーザーが入力するすべてではありませんか? – cAMPy

答えて

1

この行に問題がありますか(質問であなたのコードで分析したもの)。 doubleオブジェクトをStringに解析すると、StringDoubleの間に子と親の関係がないため、javaでは不可能です。

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

このコード行はClassCastExceptionが発生します。 valのためにdoubleタイプのオブジェクトではない文字列です。

これはうまくいくはずです。

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

ありがとうございます。

関連する問題