2013-01-19 1 views
0

선택한 행을 삭제할 때 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(); 
         JOptionPane.showMessageDialog(null, "Reply has been deleted successfully."); 
         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); 

    jTableManageReplies.repaint(); 
    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"); 
      tableModel.addRow(data); 
     } 
     resultSet.close(); 
    } catch (Exception e) { 
     System.out.println(e); 
    } 
} 

는 그리고 이것은 내 SQL 문입니다 : 내가 다시 그리기() 데이터베이스의 최신 데이터로 테이블 데이터를 업데이트 할 수에게 전화를 작동

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

. 특정 행을 삭제 한 후 데이터를 의미합니다. 그러나 기존 게시물은 계속해서 다시 추가됩니다. 그런 다음 removeAllElement 메서드를 추가하여 내 sql 문이 select * 테이블에 있기 때문에 기존 게시물을 모두 제거합니다. 그런 다음 ArrayIndexOutOfBoundsException 오류 메시지가 있습니다. 이 문제를 해결할 가이드가 있습니까? 미리 감사드립니다.

+0

게시 하시겠습니까? ** Short, Self Contained, Correct (Compilable), Example ** 그리고 당신의 코드는이 근처에 없다는 것을 의미합니다. 원하지 않는 코드를 모두 제거하고 문제를 보여주는 간단한 코드를 게시하십시오. – Amarnath

+0

나는 이미 편집했다. repaint 메서드를 사용하여 테이블 데이터를 업데이트 할 수 있습니다. 그러나 기존 게시물을 계속 추가하기 때문에 기존 게시물을 삭제하고 싶습니다. 그러나 removeAllElement 메소드를 호출하면 arrayIndexOutOfBoundException이 발생합니다. 심지어 setRowCount (0) 메서드를 시도하고 동일합니다. – Newbies

답변

1

나는 데이터베이스에서 최신 데이터 으로 테이블 데이터를 업데이트하기 위해 repaint()를 호출했으며 작동합니다.

데이터가 변경 될 때 repaint 메서드를 호출 할 필요가 없습니다. 데이터 변경은 Table Model (이 경우 DefaultTableModel)으로 처리되며 데이터가 변경 될 때마다 fireXXXMethods을 호출해야하지만 필요하지 않은 경우에도 DefaultTableModel을 사용합니다. (기본적으로 변경이있을 때이 메서드를 호출하기 때문에)

이 문제는 valuesChanged(..) 메서드에 있다고 생각합니다. 행 0에 값을 가져 오지만 테이블에 행이 있는지 여부는 확인하지 않습니다. 그러므로 제약 조건을 지키십시오.

int viewRow = jTableManageReplies.getSelectedRow(); 
// Get the first column data of the selectedrow 
if(jTableManageReplies.getRowCount() > 0) 
    int replyID = Integer.parseInt(jTableManageReplies.getValueAt(viewRow, 0).toString()); 
+0

이제 작동합니다! 고마워. 따라서 fireTableDataChanged 메소드는 데이터가 변경 될 때마다 테이블을 알리는 목적으로 사용됩니까? 맞습니까? – Newbies

+0

확실히 맞습니다. 데이터의 변경은 _ 테이블 모델에서 처리합니다. _ 그리고 구성 요소를 추가 또는 삭제하는 구성 요소가 변경된 경우 repaint() **가 필요합니다. 그러므로 적절하게 사용하십시오. 멋진 주말 되세요 :-) – Amarnath

+0

알겠습니다. 도움을 많이 주셔서 감사합니다! – Newbies