2012-03-22 19 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

相關問題