Ошибка ArrayIndexOutOfBound при выполнении удаления в jTable
Я пытаюсь выбрать определенную строку из jTable и выполнить удаление, тогда jTable будет обновлен с последними данными в базе данных. Вот как я настроил jTable:
private JTable getJTableManageReplies() {
jTableManageReplies.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
jTableManageReplies.getSelectionModel().addListSelectionListener(
new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
if (!e.getValueIsAdjusting()) {
int viewRow = jTableManageReplies.getSelectedRow();
// Get the first column data of the selectedrow
int replyID = Integer.parseInt(jTableManageReplies.getValueAt(
viewRow, 0).toString());
eForumRepliesAdmin reply = new eForumRepliesAdmin(replyID);
replyID = JOptionPane.showConfirmDialog(null, "Are you sure that you want to delete the selected reply? " , "Delete replies", JOptionPane.YES_NO_OPTION);
if(replyID == JOptionPane.YES_OPTION){
reply.deleteReply();
SetUpJTableManageReplies();}
}
}
});
return jTableManageReplies;
}
public void SetUpJTableManageReplies() {
DefaultTableModel tableModel = (DefaultTableModel) jTableManageReplies
.getModel();
String[] data = new String[5];
db.setUp("IT Innovation Project");
String sql = "Select forumReplies.reply_ID,forumReplies.reply_topic,forumTopics.topic_title,forumReplies.reply_content,forumReplies.reply_by from forumReplies,forumTopics WHERE forumReplies.reply_topic = forumTopics.topic_id ";
ResultSet resultSet = null;
resultSet = db.readRequest(sql);
tableModel.getDataVector().removeAllElements();
try {
while (resultSet.next()) {
data[0] = resultSet.getString("reply_ID");
data[1] = resultSet.getString("reply_topic");
data[2] = resultSet.getString("topic_title");
data[3] = resultSet.getString("reply_content");
data[4] = resultSet.getString("reply_by");
// Add data to table model
tableModel.addRow(data);
}
resultSet.close();
} catch (Exception e) {
System.out.println(e);
}
}
И это мои коды для удаления из базы данных:
public boolean deleteReply() {
boolean success = false;
DBController db = new DBController();
db.setUp("IT Innovation Project");
String sql = "DELETE FROM forumReplies where reply_ID = " + replyID
+ "";
if (db.updateRequest(sql) == 1)
success = true;
db.terminate();
return success;
}
Однако сразу после добавления методов SetUpJTableManageReplies в поле jDialog появляется сообщение об ошибке ArrayIndexOutOfBound. Я пытаюсь сделать, как когда пользователь выбирает определенную строку, будет всплывающее окно, чтобы попросить подтверждение удаления. Затем, сразу после нажатия кнопки "Да", данные jTable будут обновлены. Кто-нибудь может дать мне несколько руководств? Заранее спасибо.
2 ответа
Ваша проблема здесь:
tableModel.getDataVector().removeAllElements();
Лучше:
tableModel.setRowCount(0);
Гораздо лучше: написать свою собственную табличную модель и реализовать все методы, которые определены в интерфейсе TableModel, чтобы вы могли узнать, как работать с компонентом JTable
Используйте TableModel для управления данными таблицы. DefaultTableModel
будет полезно, вы должны сначала создать tableModel, затем создать JTable и установить модель таблицы в ранее созданную модель таблицы.
Вы должны выполнить вставку / удаление / обновление ячеек таблицы, используя модель, которая автоматически обновит JTable. Используйте DefaultTableModel для управления вашими данными.