Добавляем строки в готовую таблицу JTable и удаляем их из неё

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

В библиотеке Swing для этих целей служит класс JTable. Однако в литературе, а также интернет источниках, как правило, приводится описание работы с новой таблицей, которая создаётся в коде программы с нуля. Что же делать, если таблица уже создана и в неё необходимо добавить дополнительные строки или наоборот их удалить?

Несмотря на свою кажущуюся наивность данный вопрос весьма актуален как для работы с базами данных так и для таблиц формируемых другими способами.

Модель таблицы

Элементы управления Swing реализуют паттерн MVC. JTable не исключение.

Для описания модели таблиц служит интерфейс TableModel. Все классы, которые представляют модель таблицы, реализуют данный интерфейс. Обычно в качестве модели используется объект класса DefaultTableModel, но встречаются и другие классы.

Модель таблицы хранит в себе структуру таблицы, её данные  и содержит все методы для работы с ними.

Структура и данные таблицы хранятся в модели в виде коллекций типа Vector. В настоящее время данный тип коллекций считается устаревшим, но так как в библиотеке Swing он по-прежнему широко используется, его приходится время от времени применять.

Как следует из вышесказанного, для того чтобы выполнить какие либо манипуляции с данными таблицы необходимо получить доступ к её модели.

При создании таблицы с нуля в коде программы это не требуется, потому что в процессе создания таблицы явно создаётся и её модель. Однако и получить модель уже созданной таблицы не сложно. Для этого служит специальные метод getModel, который возвращает модель таблицы.

Возвращаемый результат имеет тип TableModel. Поэтому приведение типов обязательно.

DefaultTableModel dtm = (DefaultTableModel) jTable1.getModel();

Добавление строки

Допустим, есть некая таблица JTable, которая предназначена для отображения имени и фамилии. Добавим в неё новую строку.

Для этого предварительно получив модель таблицы создаём Vector в соответствии с её структурой, заполняем его данными и добавляем в таблицу при помощи метода addRow модели.

DefaultTableModel dtm = (DefaultTableModel) jTable1.getModel();

Больше никаких действий не требуется. После этого новая строка будет добавлена и автоматически отображена в таблице.

Также строку в таблицу можно добавить при помощи метода insertRow, который вставляет в таблицу строку перед строкой с определённым индексом.

int insertIndex = 2;
dtm.insertRow(insertIndex, v);

Удаление строки

Удаление строки производится при помощи метода модели removeRow, который принимает в качестве единственного параметра индекс удаляемой строки.

Если необходимо удалить строку, которая выделена в данный момент, её индекс можно получить при помощи метода getSelectedRow JTable (если ни одна строка не выбрана, возвращает -1).

dtm.removeRow(jTable1.getSelectedRow());

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

Приведённые способы добавления и удаления строк в JTable являются простой и эффективной альтернативой созданию новых моделей таблиц и заполнением их данными с нуля и прочим громоздким операциям часто предлагаемым в подобных случаях, если конечно используемая модель их поддерживает.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *