2010-07-10 126 views
1

我面臨使用AbstractTableModel的問題,我使用鏈表作爲數據的容器,我從數據庫表中獲取記錄然後我把它放在表模型中的鏈接列表然後我男jable.setModel(model )。我面臨的問題是,從db表中取出的最後一條記錄重複n次,因爲n是數據庫中的記錄數。 當我做model.getIndextOF(anAppointmentDate);每次都返回0,所以我覺得每次插入的對象都在同一個地方?我可能是錯的,但我覺得 公共類appointmentModel擴展AbstractTableModel的{抽象表模型

List<appointmentDate> patientAppointment; 

public appointmentModel() { 
    patientAppointment = new LinkedList<appointmentDate>(); // linked list 
} 

public int getRowCount() { 
    return patientAppointment.size(); 
} 

public int getColumnCount() { 
    return 2; 
} 

public String getValueAt(int rowIndex, int columnIndex) { 
    if (columnIndex == 0) { 
     return patientAppointment.get(rowIndex).getDateOFAppointment(); 
    } else if (columnIndex == 1) { 
     return patientAppointment.get(rowIndex).getTimeOfAppointment(); 
    } else { 
     return "Not found"; 
    } 
} 

public String getColumnName(int column) { 
    if (column == 0) { 
     return "date"; 
    } else if (column == 1) { 
     return "time"; 
    } else { 
     return "not found"; 
    } 
} 

public void insertRecord(appointmentDate anAppointmentDate) 
{ 
    list.add(anAppointmentDate); 
    fireTableRowsInserted(list.size()-1, list.size()-1); 
    System.out.println(list.indexOf(anAppointmentDate)); // each time it prints 0   
} 

////////// 在這些地方我使用該模型

while (resultSet.next()) { 
      N_Date= resultSet.getDate("appointDate"); 
      anAppointment.setDateOFAppointment(N_Date); 

      N_time = resultSet.getString("appointTime"); 
      anAppointment.setTimeOfAppointment(N_time); 
      tableModel.insertRecord(anAppointment); 

      } 
      jTable.setModel(tableModel);  

輸出我已經是所有表格記錄中重複的最後一條記錄了,請幫忙!

+1

那麼你想要發生什麼?你想把它放在哪裏?你想如何使用你的列表? – 2010-07-10 20:16:57

+0

重新格式化的代碼;如果不正確請回復。 – trashgod 2010-07-10 20:19:42

+0

我想添加很多記錄到列表中,但問題發生在我從db獲取的最後一條記錄重複n次(因爲n是來自db的記錄數量)... – palAlaa 2010-07-10 20:44:18

回答

1

您正在使用與AppointmentDate對象相同的參考,並且僅更改其內部狀態。

因此,每次將相同的對象添加到列表中。因此,在最後一次循環迭代中,您將列表中的所有對象設置爲具有最後一行的數據。

爲了解決這個問題,在每個循環迭代實例化一個new AppointmentDate()

while (resultSet.next()) { 
    AppointmentDate anAppointment = new AppontmentDate(); 
    // the rest is the same 
} 

還要注意的是,類名應以大寫字母開頭 - 即AppointmentDate,不appointmentDate

+0

最後它能正常工作,thaanx – palAlaa 2010-07-11 07:28:11

1

發現問題!

您不會在「使用模型的位置」顯示足夠的代碼,但看起來您正在爲每個插入點重新使用相同的對象。你已經有了這個對象,你可以根據數據庫中的內容設置它的屬性,然後將它存儲在列表中。

那麼猜猜看是什麼:每次都是同一個對象,所以它每次都有相同的值!如果你想在列表中使用不同的值,你需要使用不同的對象。別擔心,這是一個常見的初學者錯誤。

明智的做法是爲每個數據庫記錄構建一個new appointmentDate。您可能想要在構造函數中正確初始化數據。

最後,請注意,如果appointmentDate是一個類名,它應該(按照慣例)以大寫字母開頭!


最後(更一些):LinkedList是在插入高效,但是在檢索可怕執行,即get(n)事情。我希望從插入列表中可以看到更多的滾動和顯示,因此我使用的List實現在這裏表現要好得多:ArrayList。它的工作原理相同,僅在插入時稍微慢一些,而且在檢索時快得多。但這只是您的其他信息。對於像這樣的小型項目來說,性能並不重要。

+0

最後它能正常工作,thaanx – palAlaa 2010-07-11 07:26:08