Абстрактная модель стола - PullRequest
1 голос
/ 11 июля 2010

Я сталкиваюсь с проблемой при использовании AbstractTableModel, я использую связанный список в качестве контейнера для данных, и я выбираю записи из таблицы из БД, затем я помещаю их в связанный список в табличной модели, а затем в мужской jable.setModel (модель).ПРОБЛЕМА я сталкиваюсь с тем, что последняя запись, которую я выбираю из таблицы из базы данных, повторяется 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        
}

////////// здесь, где я использую модель

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);      

Вывод, который я имею, является последней записью, повторенной во всех записях таблицы, помогите плз!

Ответы [ 2 ]

1 голос
/ 11 июля 2010

Вы используете ту же ссылку на объект AppointmentDate и изменяете только его внутреннее состояние.

Таким образом, каждый раз, когда вы добавляете один и тот же объект в список.Таким образом, в последней итерации цикла вы устанавливаете все объекты в списке, чтобы иметь данные последней строки.

Чтобы исправить это, создайте экземпляр new AppointmentDate() на каждой итерации цикла:

while (resultSet.next()) {
    AppointmentDate anAppointment = new AppontmentDate();
    // the rest is the same
}

Обратите внимание также, что имя класса должно начинаться с заглавной буквы - т.е. AppointmentDate, а не appointmentDate.

1 голос
/ 11 июля 2010

Нашел проблему!

Вы не видите достаточно кода вокруг «где вы используете модель», но похоже, что вы повторно используете один и тот же объект для каждой вставки. У вас есть этот объект, вы устанавливаете его атрибуты из того, что выходит из БД, а затем сохраняете его в списке.

Ну, угадайте, что: Это один и тот же объект каждый раз, поэтому он обязательно должен иметь одно и то же значение каждый раз! Если вы хотите, чтобы в вашем списке были другие значения, вам нужно использовать разные объекты. Не волнуйтесь, это достаточно распространенная ошибка новичка.

Разумный способ сделать это - создать new appointmentDate для каждой записи в БД. Вы можете инициализировать данные прямо в конструкторе.

Наконец, обратите внимание, что если appointmentDate является именем класса, оно должно (по соглашению) начинаться с заглавной буквы!


Наконец (еще немного): LinkedList эффективен при вставках, но ужасно работает при извлечении, т. Е. Вещь get(n). Я ожидаю, что в вашем списке будет гораздо больше прокрутки и отображения, чем вставки, поэтому я бы использовал реализацию List, которая гораздо лучше работает здесь: ArrayList. Он работает так же, только незначительно медленнее при вставках и намного быстрее при извлечении. Но это просто дополнительная информация для вас. Производительность не так важна для такого маленького проекта, как этот.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...