У меня есть 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, поэтому это не решение.
, пожалуйста, поделитесь своим методом getValueAt. – rdonuk
Почему причины есть двойная цена = Double.parseDouble ((String) val) ;, btw DefaulttTableCellEditor может перенастраивать объект, вопрос в этой форме (на основе decription и кода в вашем вопросе) не подлежит ответственности или с слишком широким ответом , много раз здесь similair вопросы ... – mKorbel
@rdonuk Я обновил код. mKorbel - это не все, что пользователь вводит только в строковом значении, которое мне нужно проанализировать, чтобы удвоить? – cAMPy