Java 抽象表模型

Java 抽象表模型,java,swing,Java,Swing,我在使用AbstractTableModel时遇到了一个问题,我使用链表作为数据的容器,从数据库中提取表中的记录,然后将其放入表模型中的链表中,然后使用male jable.setModel(model)。我面临的问题是,我从db表中获取的最后一条记录重复了n次,因为n是数据库中的记录数。 当我制作model.getIndextOF(anAppointmentDate)时;每次都返回0,所以我认为它每次都在同一个位置插入对象?我可能错了,但我就是这么想的 公共类任命模型扩展了AbstractTa

我在使用AbstractTableModel时遇到了一个问题,我使用链表作为数据的容器,从数据库中提取表中的记录,然后将其放入表模型中的链表中,然后使用male jable.setModel(model)。我面临的问题是,我从db表中获取的最后一条记录重复了n次,因为n是数据库中的记录数。 当我制作model.getIndextOF(anAppointmentDate)时;每次都返回0,所以我认为它每次都在同一个位置插入对象?我可能错了,但我就是这么想的 公共类任命模型扩展了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        
}
我的输出是所有表记录中重复的最后一条记录,请提供帮助!

发现问题

您没有在“使用模型的位置”周围显示足够的代码,但看起来您在为每个插入使用相同的对象。您有了这个对象,您可以从数据库中设置它的属性,然后将它隐藏在列表中

你猜怎么着:它每次都是同一个对象,所以每次都有相同的值!如果你想在列表中使用不同的值,你需要使用不同的对象。别担心,这是初学者经常犯的错误

一个合理的方法是为每个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
}