Java Can';无法从JTable中的列中获取正确的值

Java Can';无法从JTable中的列中获取正确的值,java,swing,jtable,type-conversion,defaulttablemodel,Java,Swing,Jtable,Type Conversion,Defaulttablemodel,我有一个名为“购物车”的JTable,用户可以在购买产品之前添加产品。该表中唯一可编辑的列是最后一列Quantity,它允许用户更改他们希望购买的产品数量。默认情况下,添加产品时,此值为1。当我使用这些默认值创建发票时,ORDERS DB表将成功更新。但是,如果我通过键入来更改quantity单元格中的金额,我会遇到一个不知道如何修复的异常。我试图从该列获取的整数值似乎是以字符串形式返回的,而不是整数 基本上我有库存,我在其中存储的产品数量。我从“I”行和最后一列“4”中表格的模型中得到该值 当

我有一个名为“购物车”的JTable,用户可以在购买产品之前添加产品。该表中唯一可编辑的列是最后一列Quantity,它允许用户更改他们希望购买的产品数量。默认情况下,添加产品时,此值为1。当我使用这些默认值创建发票时,ORDERS DB表将成功更新。但是,如果我通过键入来更改quantity单元格中的金额,我会遇到一个不知道如何修复的异常。我试图从该列获取的整数值似乎是以字符串形式返回的,而不是整数

基本上我有库存,我在其中存储的产品数量。我从“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
通过检查变量类型,我找到了一个临时解决方法:

/** 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));
}
  • 您必须在TableModel中设置ColumnClass,其值为整数,以便以
    int tempStock=(int)cartModel.getValueAt(i,4)的形式返回int值

  • 以获得真正的建议,并帮助您使用


  • 尝试使用
    Integer.parseInt(String)
    而不是typecast,这样做有效吗?@simil也尝试过。不起作用,因为我得到了与异常完全相反的结果。也就是说,更新后的值将起作用,但deafualt值1将尝试解析整数而不是字符串。你知道java中是否有方法可以检测我得到的变量类型吗?@Andrew Thompson-url for SSCCE对我来说是错误的,(hmmmm与s'OracleSwing教程中的JComponents链接相同)我刚才测试过它&对我来说还可以。可能是一时的小故障。
    /** 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));
    }