Java 抽象表模型
我在使用AbstractTableModel时遇到了一个问题,我使用链表作为数据的容器,从数据库中提取表中的记录,然后将其放入表模型中的链表中,然后使用male jable.setModel(model)。我面临的问题是,我从db表中获取的最后一条记录重复了n次,因为n是数据库中的记录数。 当我制作model.getIndextOF(anAppointmentDate)时;每次都返回0,所以我认为它每次都在同一个位置插入对象?我可能错了,但我就是这么想的 公共类任命模型扩展了AbstractTableModel{Java 抽象表模型,java,swing,Java,Swing,我在使用AbstractTableModel时遇到了一个问题,我使用链表作为数据的容器,从数据库中提取表中的记录,然后将其放入表模型中的链表中,然后使用male jable.setModel(model)。我面临的问题是,我从db表中获取的最后一条记录重复了n次,因为n是数据库中的记录数。 当我制作model.getIndextOF(anAppointmentDate)时;每次都返回0,所以我认为它每次都在同一个位置插入对象?我可能错了,但我就是这么想的 公共类任命模型扩展了AbstractTa
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
}
我的输出是所有表记录中重复的最后一条记录,请提供帮助!发现问题
您没有在“使用模型的位置”周围显示足够的代码,但看起来您在为每个插入使用相同的对象。您有了这个对象,您可以从数据库中设置它的属性,然后将它隐藏在列表中
你猜怎么着:它每次都是同一个对象,所以每次都有相同的值!如果你想在列表中使用不同的值,你需要使用不同的对象。别担心,这是初学者经常犯的错误
一个合理的方法是为每个DB记录构造一个new appointmentDate
。您可能希望在构造函数中正确初始化数据
最后,请注意,如果appointmentDate
是一个类名,它(按照惯例)应该以大写字母开头
最后(更多):
LinkedList
在插入时效率很高,但在检索时性能很差,即get(n)
东西。我希望列表中的滚动和显示比插入要多得多,所以我会使用性能更好的列表实现:ArrayList
。它的工作原理是一样的,只是插入时稍微慢一点,检索时要快得多。但这只是为您提供的附加信息。Pe对于这样的小项目,性能并不是那么重要。您对AppointmentDate
对象使用相同的引用,只更改其内部状态
因此,每次向列表中添加相同的对象时,在最后一次循环迭代中,您将列表中的所有对象设置为具有最后一行的数据
要解决此问题,请在每个循环迭代中实例化一个new AppointmentDate()
:
while (resultSet.next()) {
AppointmentDate anAppointment = new AppontmentDate();
// the rest is the same
}
另外请注意,类名应该以大写字母开头,即任命日期
,而不是任命日期
,那么您希望发生什么?您希望它放在哪里?您希望如何使用列表?重新格式化的代码;如果不正确,请还原。我想向列表中添加许多记录,但问题发生了我从数据库获取的最后一条记录重复n次(因为n是来自数据库的记录数)…您必须添加更多详细信息。列表是如何定义和链接到您的AbstractTableModel的?indexOf
的返回值似乎表明该对象位于列表中,否则它将给出-1。它是什么类型的列表?
while (resultSet.next()) {
AppointmentDate anAppointment = new AppontmentDate();
// the rest is the same
}