Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JTableModel行添加错误_Java_Swing - Fatal编程技术网

Java JTableModel行添加错误

Java JTableModel行添加错误,java,swing,Java,Swing,这是我的桌面模型: public class ScheduledRecordsTableModel extends AbstractTableModel { private String[] headers = {"Interpret", "Titel"}; private List<ScheduledRecord> scheduledRecords; public ScheduledRecordsTableModel(List<ScheduledRe

这是我的桌面模型:

public class ScheduledRecordsTableModel extends AbstractTableModel {
    private String[] headers = {"Interpret", "Titel"};
    private List<ScheduledRecord> scheduledRecords;

    public ScheduledRecordsTableModel(List<ScheduledRecord> recordsList) {
        super();
        this.scheduledRecords = recordsList;
    }

    @Override
    public int getRowCount() {
        return scheduledRecords.size();
    }

    @Override
    public int getColumnCount() {
        return 2;
    }

    @Override
    public String getColumnName(int column) {
        return headers[column];
    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        ScheduledRecord r = scheduledRecords.get(rowIndex);
        switch (columnIndex) {
            case 0:
                return r.getActor();
            case 1:
                return r.getTitle();
            default:
                return null;
        }


    }

    public void addRow(ScheduledRecord r) {
        ScheduledRecord toAdd = null;
        for (Iterator<ScheduledRecord> recordIterator = scheduledRecords.iterator(); recordIterator.hasNext(); ) {
            ScheduledRecord record = recordIterator.next();
            if (record.equals(r)) {
                throw new IllegalArgumentException("Scheduled Record " + r.toString() + " already exists");
            } else {
                toAdd = record;
            }
        }
        scheduledRecords.add(toAdd);
    }

    public void removeRow(ScheduledRecord r) {
        scheduledRecords.remove(r);
        fireTableDataChanged();
    }

    public ScheduledRecord getScheduledRecordFromIndex(int index) {
        return scheduledRecords.get(index);
    }

    @Override
    public boolean isCellEditable(int rowIndex, int columnIndex) {
        return false;
    }
}
这里是addScheduledRecord方法:

public static synchronized boolean addScheduledRecord(ScheduledRecord record) {
    RecorderController.getInstance().addScheduledRecord(record);
    Gui.getInstance().getRecorderTab().getScheduledRecordsWindow().getTable().getScheduledRecordsTableModel().addRow(record);
    Gui.getInstance().getRecorderTab().getScheduledRecordsWindow().getTable().getScheduledRecordsTableModel().fireTableDataChanged();
    databaseConnector.addScheduledRecord(record);
    return true;
}
如果我添加一个条目,则“上一个”条目将添加到表中,但是如果我关闭表并再次打开它,则所有条目都是正确的。RecorderController仅为其他目的保存自己的列表(此列表以另一种方式修改)
有人看到我的错误了吗?

这应该可以修复addRow方法(不需要迭代,因为有一个contains方法):


为了更快地获得更好的帮助,请发布或。检查以下内容:如果(record.equals(r))仅在ScheduledRecord实现了正确的hashCode和equals方法时有效,或者它们在内存中都是完全相同的实例。fireTableDataChanged();对于addRow也?构造函数中传递的列表正在表模型之外的一些其他代码中更改,此处未显示?列表recordsList@Teddy是的,他们确实实现了一个适当的equals方法。我参加这次活动是因为我认为这可能会有所帮助。我现在会检查列表,但是使用tableDataChanged对我来说很好,因为我不知道新行在我的表中的位置?你是对的。。。tableDataChanged应该涵盖所有更改。是的,但在调试中,我不知道为什么最后一个entrie显示为“double”。添加正确,因为如果我重新打开窗口,一切正常如果你重新打开窗口,你的列表是从外部生成的吗?使用addRow方法添加了更多的行,该方法有一个bug?它是这样的:new TableModel(ListFromDatabase分配给private list),addRow添加到private list
public static synchronized boolean addScheduledRecord(ScheduledRecord record) {
    RecorderController.getInstance().addScheduledRecord(record);
    Gui.getInstance().getRecorderTab().getScheduledRecordsWindow().getTable().getScheduledRecordsTableModel().addRow(record);
    Gui.getInstance().getRecorderTab().getScheduledRecordsWindow().getTable().getScheduledRecordsTableModel().fireTableDataChanged();
    databaseConnector.addScheduledRecord(record);
    return true;
}
public void addRow(ScheduledRecord r) {
    if (scheduledRecords.contains(r)) {
        throw new IllegalArgumentException("Scheduled Record " + r.toString() + " already exists");
    }
    scheduledRecords.add(r);
}