我在使用 AbstractTableModel 时遇到问题,我使用链表作为数据容器,然后从数据库中的表中获取记录,然后将其放入表模型中的链表中,然后我男 jable.setModel(model)。我面临的问题是,我从数据库表中获取的最后一条记录重复了n次,因为n是数据库中的记录数。 当我制作 model.getIndextOF(anAppointmentDate); 时每次都返回 0,所以我认为每次都将对象插入到同一个位置?我可能错了,但这就是我的想法 公共(public)类 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);
我的输出是所有表记录中重复的最后一条记录,请帮忙!
最佳答案
您正在使用对 AppointmentDate
对象的相同引用,并且仅更改其内部状态。
因此每次您将相同的对象添加到列表中时。因此,在最后一次循环迭代中,您将列表内的所有对象设置为具有最后一行的数据。
要解决此问题,请在每次循环迭代时实例化一个 new AppointmentDate()
:
while (resultSet.next()) {
AppointmentDate anAppointment = new AppontmentDate();
// the rest is the same
}
另请注意,类名应以大写字母开头 - 即 AppointmentDate
,而不是 appointmentDate
。
关于java - 抽象表模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3220696/