2013-01-18 1 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; 
} 

, 나는 SetUpJTableManageReplies의 Methos의 추가 직후 ArrayIndexOutOfBound를 오류 메시지가 jDialog 상자에. 나는 사용자가 특정 행을 선택할 때처럼 삭제하려고 확인하려고 튀어 나올 것입니다. 그런 다음 yes를 클릭하면 바로 jTable 데이터가 새로 고쳐집니다. 누군가 가이드 좀 줄 수있어? 미리 감사드립니다.

+1

'ArrayIndexOutOfBound' 예외에서 스택 트레이스를 게시 할 수 있습니까? –

+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

전체 스택 추적을 게시하십시오. 잊지 마세요. deleteReply 이후 SetUpJTableManageReplies를 호출해야합니다. –

0

테이블 데이터를 관리하기 위해 TableModel을 사용하십시오. DefaultTableModel이 유용 할 것입니다. 먼저 tableModel을 작성한 다음 JTable을 작성하고 테이블의 모델을 이전에 작성한 테이블 모델로 설정해야합니다.

모델을 사용하여 테이블 셀에 삽입/삭제/업데이트를 수행하면 JTable이 자동으로 업데이트됩니다. DefaultTableModel을 사용하여 데이터를 관리하십시오.

+0

몇 가지 예를 게시 할 수 있습니까? 나는 지금 혼란 스럽다. – Newbies

관련 문제