2012-08-22 116 views
3

我有3列可變行的JTable。用戶可以編輯任何單元格的值(因爲單元格可選)並按回車鍵。一旦他/她按下「保存」,我就可以獲得每個單元格的值,並將它們合併爲一個單獨的字符串,每個單元格的值由管道(|)分隔。例如(Col1 | Col1 | Col1 | Col2 | Col2 | Col2 |)到目前爲止,這麼好。獲取JTable單元格的值

問題是,儘管此字符串轉換方法有效,但當用戶更改表格中單元格的值時,代碼仍會獲取JTable單元格的OLD值。跟我到目前爲止?我不知道我該如何解決這個問題。這是下面的代碼,以防萬一它是必需的。 (我意識到我的StringBuffer是我應該學會離開的東西)

int rowNumber = inventoryData.getModel().getRowCount(); 
StringBuffer compiledData = new StringBuffer(); 
Object currentData = null; 
for(int i=0;i<rowNumber;i++){ 
    if(inventoryData.getModel().getValueAt(i, 0) != null) currentData = inventoryData.getModel().getValueAt(i, 0).toString(); 
    compiledData.append(currentData.toString()+"|"); 
    if(inventoryData.getModel().getValueAt(i, 1) != null) currentData = inventoryData.getModel().getValueAt(i, 1).toString(); 
    compiledData.append(currentData.toString()+"|"); 
    if(inventoryData.getModel().getValueAt(i, 2) != null) currentData = inventoryData.getModel().getValueAt(i, 2).toString(); 
    compiledData.append(currentData.toString()+"|"); 
    currentData = ""; 
} 
String repPipesRemoved = compiledData.toString().replaceAll("([|])\\1+", ""); 

StringBuffer tempBuffer = new StringBuffer(repPipesRemoved); 
tempBuffer.append("|"); 
String finalString = tempBuffer.toString(); 

感謝您閱讀 - 有什麼想法嗎?

+2

按回車鍵,否則it'l返回舊值只有.. – Luna

+1

我們可能需要看到你的'TableModel'。你如何實現'isCellEditable()'? 'setValueAt()'?發佈[sscce](http://sscce.org/)會很有幫助。 – trashgod

回答

2

你可以試試這個answer:只要您編輯該單元格

table.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE);