2010-07-10 72 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