JTable не обновляется при обновлении модели

Хорошо, я прочитал об этом, но я все еще очень смущен. У меня есть JTable с настраиваемой моделью таблицы, которая хранит данные в ArrayList. Отображает просто отлично. Однако, когда я хочу добавить строку, я добавляю объект в ArrayList, а затем вызываю fireTableRowsInserted(...). Однако таблица не обновляется.

public Main() {
        initComponents();
        current_map = new Map();
        current_map.authors.add(new Author("New Author"));
        author_model = new AuthorModel(current_map.authors);
        jTable1.setModel(new AuthorModel(current_map.authors)); <---This is the mistake
    }   
...     



    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        author_model.authors.add(new Author("New Author"));
        author_model.fireTableRowsInserted(author_model.authors.size(), author_model.authors.size());
    }

Приведенный выше код взят из моего основного JFrame. Не знаю, куда идти отсюда.

Я сейчас потерян.


person Chris Chambers    schedule 12.05.2013    source источник
comment
Не вызывайте методы fireXXX TableModel напрямую. Эти методы должны вызываться только самим классом TableModel.   -  person camickr    schedule 13.05.2013
comment
Ах, значит, обновление будет происходить автоматически? Я попробую.   -  person Chris Chambers    schedule 13.05.2013


Ответы (1)


Таблица инициализируется:

jTable1.setModel(new AuthorModel(current_map.authors));

Но когда кнопка нажата, вы изменяете переменную author_model:

author_model.authors.add(new Author("New Author"));

Инициализация таблицы должна быть

jTable1.setModel(author_model);

Вы также должны уважать соглашения об именах Java и выбирать лучшие имена для своих переменных.

person JB Nizet    schedule 12.05.2013
comment
Ох, как же я пропустил это. Я знаю, что имена нехорошие, они временные. - person Chris Chambers; 13.05.2013
comment
author_model должен быть authorModel. То же самое для current_map. Переменные написаны в CamelCased в Java. - person JB Nizet; 13.05.2013
comment
Кроме того, что касается временных имен: вы должны всегда продумывать даже самые простые проекты. Недооценка снова и снова оказывается проблемой (например, создание Интернета? кому КОГДА-ЛИБО понадобится более 4 миллиардов IP-адресов?). Если вы когда-нибудь в конечном итоге расширите этот проект или даже просто скопируете часть кода для использования в другом проекте, подобные проблемы будут сбивать с толку вас и других. И если это каким-то образом попадет в публичный API... *содрогается* - person wchargin; 13.05.2013
comment
Я бы поддержал это, а также то, что усилия, затраченные на наименования вещей, всегда того стоят. Заведите привычку рассказывать читателям правду обо всем, что вы называете: переменные, классы, методы, пакеты. Шансы на то, что эти имена будут жить после временного периода, слишком велики. Кроме того, наибольшая потребность в них возникает в начале, пока вы пытаетесь отлаживать подобные вещи... - person arcy; 13.05.2013
comment
Отмеченный. Спасибо за совет. - person Chris Chambers; 13.05.2013