2016-06-14 3 views
1

У меня есть Jtable с одним из столбцов, представляющих цену, которая должна быть доступна для редактирования. Но всякий раз, когда я пытаюсь обновить значение ячейки, я получаю исключение:Java swing как редактировать двойную ячейку в 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, поэтому это не решение.

+0

, пожалуйста, поделитесь своим методом getValueAt. – rdonuk

+0

Почему причины есть двойная цена = Double.parseDouble ((String) val) ;, btw DefaulttTableCellEditor может перенастраивать объект, вопрос в этой форме (на основе decription и кода в вашем вопросе) не подлежит ответственности или с слишком широким ответом , много раз здесь similair вопросы ... – mKorbel

+0

@rdonuk Я обновил код. mKorbel - это не все, что пользователь вводит только в строковом значении, которое мне нужно проанализировать, чтобы удвоить? – cAMPy

ответ

1

проблема с этой линией (что я проанализировал с помощью вашего кода, добавленного в вопрос). Вы просто пытаетесь проанализировать объект double в String, который невозможен в java, потому что между дочерними и родительскими отношениями нет String и Double.

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

Эта строка кода поднимет ClassCastException. из-за val - тип объекта double, а не строка.

вы можете попробовать, это должно работать нормально.

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

Thank you.

 Смежные вопросы

  • Нет связанных вопросов^_^