2014-04-18 93 views
0

我正在進行項目的最後部分,這是我遇到的最後一個問題之一。這部分用於編輯預訂,即更改爲特定預訂預訂的房間。 我有2個JTables,一個有可用房間,另一個房間已經預訂了預訂。兩者都有單獨的DefaultTable模型和2D對象數組。 我在兩個表格之間有一個添加和刪除按鈕,它們交換了您選擇的行。我想我不刷新2D數組。在第二次嘗試添加另一行時,模型仍然是指原始二維數組,因爲我不從二維數組中移除該行,所以它給了我錯誤的行數據。將行從JTable添加到另一個JTable中

是否有更簡單的方法使用JTable/model方法解決此問題,而不是創建臨時2D對象數組來排除選定的行?

以下示例代碼顯示ActionPerformed代碼。

if(e.getSource().equals(addRow)){ 
     System.out.println(tableLeft.getSelectedRow()); 
     if(tableLeft.getSelectedRow() == -1){ //if no row selected 

     } 
     else{ 
      model.insertRow(tableRight.getRowCount(),array2dLeft[tableLeft.getSelectedRow()]); 
      modelLeft.removeRow(tableLeft.getSelectedRow()); 
      modelLeft.fireTableRowsDeleted(tableLeft.getSelectedRow(),tableLeft.getSelectedRow()); 
      txtTotalCost.setText("€" + getTotalCost()); 
     } 
    } 
    if(e.getSource().equals(removeRow)){ 
     if(tableRight.getSelectedRow() == -1){ //if no row selected     
     } 
     else{ 
      modelLeft.insertRow(tableLeft.getRowCount(),array2dLeft[tableRight.getSelectedRow()]); 
      model.removeRow(tableRight.getSelectedRow()); 
      txtTotalCost.setText("€" + getTotalCost()); 
     } 
    } 
} 

回答

1

,但我想我不會刷新二維數組。

您不應該訪問2D陣列。該數組只應用於最初將數據加載到表模型中。然後,您可以將Array變量設置爲null,以免您再次使用它。

之後,所有更新應該直接在TableModel上完成,使用DefaultTableModeladdRow()removeRow()方法。

您還需要使用的TableModel的getValueAt(...)方法從模型中獲取數據,以便您可以創建行數據的向量(或陣列),並使用addRow()方法中的數據。

+0

啊,現在工作很好。我會在參考資料中給你一些功勞,謝謝! – Mark