2016-06-14 1 views
1

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.

+0

veuillez partager votre méthode 'getValueAt'. – rdonuk

+0

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

+0

@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

Répondre

1

problème avec cette ligne (ce que j'ai analysé par votre code ajouté dans Question). Vous essayez simplement d'analyser un objet double dans un String ce qui n'est pas possible dans java car il n'y a pas de relation parent-enfant entre String et Double.

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

Cette ligne de code soulèvera ClassCastException. en raison de val est un type double d'objet pas une chaîne.

vous pouvez essayer ceci devrait fonctionner correctement.

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

Merci.