J'ai un Jtable avec l'une des colonnes présentant le prix qui devrait être modifiable. Mais chaque fois que je tente de mettre à jour la valeur de la cellule, je reçois l'exception:Java swing comment modifier double cellule dans JTable
java.lang.ClassCastException: java.lang.Double cannot be cast to java.lang.String
le modèle pour mon produit se présente comme suit:
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
}
Dans ma classe personnalisée extension 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;
}
}
Dois-je changer le prix en chaîne? Y a-t-il un autre moyen normal de faire ça? Si je supprime getColumnClass, le changement de prix fonctionne, mais je ne peux pas afficher le produit Pic donc ce n'est pas une solution.
veuillez partager votre méthode 'getValueAt'. – rdonuk
pourquoi les raisons sont là double prix = Double.parseDouble ((String) val) ;, btw DefaulttTableCellEditor peut se refermer Objet, question sous cette forme (basée sur la description et le code dans votre question) n'est pas responsable, ou avec une réponse trop large , plusieurs fois ici des questions similaires ... – mKorbel
@rdonuk J'ai mis à jour le code. mKorbel n'est pas tout ce que l'utilisateur tape juste une valeur de chaîne que j'ai besoin d'analyser pour doubler? – cAMPy