2017-05-21 2 views
0

Bonjour les gars, j'essaie d'apprendre la programmation java et puis je rencontre un problème que je ne sais pas pourquoi avec mon code quand j'apprends à propos de JTable. Donc, ce que j'essaye de faire est quand j'ai double cliqué sur la rangée dans JTable nommé TableGejala, la rangée que j'ai double cliqué sera transférée dans l'autre JTable nommé TableAturan et après que la rangée que j'ai double cliqué dans TableGejala sera supprimé. Pour la partie de transfert de ligne de TableGejala à TableAturan transféré avec succès lorsque j'ai double-cliqué sur la ligne, mais il ne supprime pas la ligne correcte dans TableGejala. Au lieu de supprimer la ligne sur laquelle j'ai cliqué, il supprime la ligne en dessous.Comment faire pour supprimer correctement la ligne dans JTable avec double clic?

Pour plus de détails, voici mon code pour créer 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); 
    } 

Et ceci est mon code pour obtenir des données pour ma table de 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) {} 
} 

Ceci est mon code transférer la ligne et supprimer la ligne:

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

et voici la capture d'écran de mon problème:

Before Double Clicked

After Double Clicked

Quelle partie qui fait ma sortie obtenir la mauvaise ligne à supprimer? S'il vous plaît aidez-moi, et je vous remercie d'avance pour toute aide, même pour lire ma question :)

Répondre

1

Tout d'abord désactiver la propriété modifiable de cellule dans votre première table (TabelGejala) pour assurer la suppression correcte de la ligne. J'ai réalisé cela en utilisant le code suivant: -

//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); 

puis utilisez jtable.getselectedrow() et jtable.getselectedcolumn() pour obtenir des valeurs de la table. Après avoir ajouté les valeurs souhaitées à la deuxième table, supprimez simplement la ligne sélectionnée. voici le code, dérivé de votre code: -

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! Je vous remercie beaucoup pour votre aide :) –