2014-01-27 103 views
0

我有一個JTable,它是一個DefaultTableModel。表中的數據是從ArrayList CarList訪問的。我遇到的問題是,在刪除行後,它只是暫時刪除。要刪除項目中的行,用戶必須選擇一行,然後按下按鈕刪除。當我使用我正在使用的編碼時,該行將從jTable中刪除,但數據不會從我的Arraylist中刪除,因此當我再次打開JTable時,我刪除的行仍然存在。誰能幫幫我嗎?我有一些編碼這裏:從Jtable刪除行後保存

ArrayList CarList = CarRentalSystem.CarList; 
UsingFiles CarFile = CarRentalSystem.CarFile; //ArrayLists accessed from the whole project 

/** 
* Creates new form ViewCars 
*/ 
public ViewCars() { //creating the table and accessing the data from the arraylists 
    initComponents(); 
    this.CarList=CarList; 
    DefaultTableModel model = (DefaultTableModel) carTable.getModel(); 
    for (int i=0; i<CarList.size(); i++){ 
     Car car = (Car) CarList.get(i); 
     model.addRow(new Object[]{car.getCarNum(), car.getManufacturer(), car.getModel(), car.getBooked(), car.getAircondition()}); 

    btnEdit.setVisible(true); 
    btnDelete.setVisible(false); 
    btnSave.setVisible(false); 
    } 

//刪除按鈕編碼

 private void btnDeleteActionPerformed(java.awt.event.ActionEvent evt) {           

     DefaultTableModel model = (DefaultTableModel) this.carTable.getModel(); 
     int[] rows = carTable.getSelectedRows(); 
     for(int i=0;i<rows.length;i++){ 
      model.removeRow(rows[i]-i); 

      JOptionPane.showMessageDialog(null, "Row Deleted"); //the row is deleted but the data isn't 

      } 
} 
}     

回答

0

每次創建JTable的模型時,你正在服用的所有項目,在您的汽車名單。您可以從表格模型中刪除它們,但不要從數組列表中刪除這些項目。您需要修改您的刪除代碼以從carList中刪除。

您還應該使用較低的駱駝事件慣例命名變量。

  • 我會創建自己的表模型,其中包含汽車列表,以便表模型本身可以直接從汽車列表中刪除的東西。除非您的汽車列表的使用情況與您在JTable中顯示的內容不同步。
1

在這裏,您無法從ArrayList中刪除項目,因此每次創建JTable模型時,CarList中的所有項目都會添加到JTable中。

您需要

CarList.remove(Object_To_Remove); 

添加到您的刪除代碼。

有關如何從ArrayList中刪除對象的更多幫助,請參閱thisRemove Item from ArrayList StackOverflow上的這個問題可能會對你有所幫助。或者更好的辦法,你可以直接去Docs.