2012-03-22 91 views
1

我有一个名为“Cart”的JTable,用户可以在购买产品之前添加它们。该表中唯一的可编辑列是最后一列,称为数量,它允许用户更改他们希望购买的产品数量。默认情况下,在添加产品时,该值为1。当我使用这些默认值创建发票时,ORDERS数据库表已成功更新。但是,如果我通过键入数量来更改数量单元格的数量,则会得到一个我不知道如何解决的异常。这似乎是我试图从该列获得的整数值返回为一个字符串,而不是整数。无法从JTable列中获取正确的值

基本上我有整数tempStock其中我存储产品数量。我从表格的“i”行和最后一列“4”中得到该值。

int tempStock = (int)cartModel.getValueAt(i, 4); 

当程序在此表中添加新行时,fourht列默认为1,当我调用该值时,我会得到整数。但是,如果我在该列中键入其他值,则不再获取int,而是String。

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer 

我已经找到了一个临时变通,通过检验变量的类型:你必须setColumnClass在TableModel值为整数

/** Check if Quantity field was updated **/ 
if (cartModel.getValueAt(i, 4).getClass().getName().equals("java.lang.Integer")) { 
    tempStock = (int)cartModel.getValueAt(i, 4); 
} else { 
    tempStock = Integer.parseInt((String)cartModel.getValueAt(i, 4)); 
} 
+1

尝试使用'Integer.parseInt(String)'而不是类型转换,这是否工作? – Simiil 2012-03-22 09:40:33

+0

@Simiil也尝试过。没有工作,因为那时我得到了完全相反的例外。也就是说,更新后的值可以工作,但是1的失效值将试图解析整数而不是字符串。你知道在java中是否有方法来检测我得到的变量类型? – vedran 2012-03-22 09:44:41

回答

3
  1. 在形式int tempStock = (int)cartModel.getValueAt(i, 4);返回int值

  2. 为真正的sugestions和帮助你必须编辑你的问题与SSCCE

+0

@Andrew Thompson对于我来说,SSCCE的链接对我来说是宕机的(嗯,同样链接到S'Oracle Swing教程中的JComponents) – mKorbel 2012-03-22 09:46:02

+1

我测试了一下,它对我来说是OK的。可能是一个短暂的故障。 – 2012-03-22 09:57:47