2013-01-18 61 views
-1

我嘗試從jTable中選擇某個行並執行刪除操作,然後將使用數據庫中的最新數據更新jTable。這是我如何設置JTable中:在jTable中執行刪除時ArrayIndexOutOfBound錯誤

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

然而,有一個錯誤信息是ArrayIndexOutOfBound之後我加入SetUpJTableManageReplies methos在jDialog框中。我試圖像用戶選擇某一行時那樣,會彈出一個要求刪除的確認。然後,當他們點擊是時,jTable數據將被刷新。有人可以給我一些指導嗎?提前致謝。

+1

你可以從'ArrayIndexOutOfBound'異常發佈stacktrace嗎? –

+0

java.lang.ArrayIndexOutOfBoundsException:9> = 1.在執行刪除操作後,我目前在數據庫表中有9行數據。 – Newbies

+0

有人知道最新的問題? – Newbies

回答

1

您的問題就在這裏:

tableModel.getDataVector().removeAllElements(); 

更好:

tableModel.setRowCount(0); 

好多了:寫你自己的表模型和實現其在TableModel接口中定義的所有方法 - 這樣你就可以學會如何處理JTable組件

+0

如果我改變這個,然後我收到另一個錯誤信息:線程「AWT-EventQueue-0」中的異常java.lang.ArrayIndexOutOfBoundsException:-1 – Newbies

+0

我設法通過添加jTableManageReplies.repaint()來刷新jTable。但現有的帖子將不斷重新添加。當我添加setRowCount方法來刪除現有的帖子時,錯誤再次出現。任何指南來解決這個問題? – Newbies

+0

請發佈完整的堆棧跟蹤。不要忘記,刪除之後,你必須調用SetUpJTableManageReplies –

0

使用TableModel管理表數據。 DefaultTableModel會很有用,您應該先創建tableModel,然後創建JTable並將表的模型設置爲以前創建的表模型。

您應該使用模型來執行插入/刪除/更新表格單元格,這將自動更新JTable。使用DefaultTableModel來管理你的數據。

+0

你可以發佈一些這樣的例子嗎?我現在有點困惑。 – Newbies