2017-05-21 24 views
0

下午好球員,我想學習Java編程,然後我遇到了一些問題,我不跟我的代碼知道爲什麼,當我學習的JTable。如何正確刪除行的JTable與雙擊?

因此,我想要做的是當我雙擊JTable中名爲TableGejala的行時,我雙擊的行將轉移到另一個名爲TableAturan的JTable中,之後我雙擊TableGejala中的行將被刪除。從TableGejala轉移行TableAturan的部分成功轉移時,我雙擊了該行,但它不會在TableGejala刪除正確的行。不用刪除,我點擊了行,它刪除它下面的一行。

有關詳細信息,這是我的代碼來創建TableGejala:

private void getTableGejala() { 
     while(tabel2.getRowCount() > 0){ 
      for(int i=0;i < tabel2.getRowCount();i++){ 
       tabel2.removeRow(i); 
      } 
     } 

     tabel2.addColumn("ID Gejala"); 
     tabel2.addColumn("Nama Gejala"); 

     TabelGejala.setModel(tabel2); 
     TabelGejala.setAutoResizeMode(TabelGejala.AUTO_RESIZE_ALL_COLUMNS); 
    } 

然後這是我的代碼從MySQL爲我的表中的數據:

private void loadDataGejala(Boolean baru){ 
    tabel2.getDataVector().removeAllElements(); 

    try { 
     java.sql.Connection konek = (Connection) Koneksi.KoneksiDB.getConnection(); 
     java.sql.Statement konek_statement = konek.createStatement(); 
     String query_bukaTabel = ""; 
     if(baru){ 
      query_bukaTabel = "select id_gejala,nama_gejala from gejala"; 
     } 
     else{ 
      String idPkt = FieldID.getText(); 
      query_bukaTabel = "select gejala.id_gejala,gejala.nama_gejala from gejala where gejala.id_gejala not in(select id_gejala from aturan2 where id_penyakit='"+idPkt+"')"; 
     } 

     java.sql.ResultSet line_result = konek_statement.executeQuery(query_bukaTabel); 
     while (line_result.next()) { 
      Object[] getO = new Object[2]; 
      getO[0] = line_result.getString("id_gejala"); 
      getO[1] = line_result.getString("nama_gejala"); 
      tabel2.addRow(getO); 
     } 
     line_result.close(); 
     konek_statement.close(); 
    }catch (Exception e) {} 
} 

這是我的代碼轉移行並刪除該行:

private void TabelGejalaMousePressed(java.awt.event.MouseEvent evt) {           

    if (evt.getClickCount()>=2){ 
     int col = 0; 
     int row = 0; 
     row = TabelGejala.rowAtPoint(evt.getPoint()); 
     col = TabelGejala.columnAtPoint(evt.getPoint()); 
     String col1 = (String)TabelGejala.getValueAt(row, 0); 
     String col2 = (String)TabelGejala.getValueAt(row, 1); 
     DefaultTableModel model = (DefaultTableModel) TabelAturan.getModel(); 
     DefaultTableModel old = (DefaultTableModel) TabelGejala.getModel(); 
     old.removeRow(row); 
     model.addRow(new Object[]{col1, col2, 0}); 
     TabelAturan.requestFocus(); 
     TabelAturan.setRowSelectionInterval(TabelAturan.getRowCount()-1,TabelAturan.getRowCount()-1);   
     TabelAturan.editCellAt(TabelAturan.getRowCount()-1,2); 
    } 
} 

而這是我的問題的屏幕截圖:

Before Double Clicked

After Double Clicked

哪一部分,使我的輸出拿錯行被刪除?請幫幫我,謝謝你提前爲任何幫助,甚至看我的問題:)

回答

1

首先禁止細胞在你的第一個表(TabelGejala)可編輯的屬性,以確保行的正確刪除。我實現了這個使用下面的代碼: -

//instance table model 
    DefaultTableModel tableModel = new DefaultTableModel(new Object[][]{}, 
      new String[]{ 
       "ID Gejala", "Nama Gejala" 
      }) { 

     @Override 
     public boolean isCellEditable(int row, int column) { 
      //all cells false 
      return false; 
     } 
    }; 

    TabelGejala.setModel(tableModel); 

然後使用jtable.getselectedrow()和jtable.getselectedcolumn()從表中獲取的值。在將所需值添加到第二個表格後,只需刪除選定的行。這裏是從您的代碼派生的代碼: -

private void TabelGejalaMousePressed(java.awt.event.MouseEvent evt) {           
    // TODO add your handling code here: 
    if (evt.getClickCount() >= 2) { 

     DefaultTableModel model = (DefaultTableModel) TabelAturan.getModel(); 
     DefaultTableModel old = (DefaultTableModel) TabelGejala.getModel(); 
     model.addRow(new Object[]{TabelGejala.getValueAt(TabelGejala.getSelectedRow(), 0), TabelGejala.getValueAt(TabelGejala.getSelectedRow(), 1), 0}); 
     old.removeRow(TabelGejala.getSelectedRow()); 

     TabelAturan.requestFocus(); 
     TabelAturan.setRowSelectionInterval(TabelAturan.getRowCount() - 1, TabelAturan.getRowCount() - 1); 
     TabelAturan.editCellAt(TabelAturan.getRowCount() - 1, 2); 
    } 
}  
+0

AAAH I SEEE!非常感謝你的幫助 :) –