Problema con la cantidad de resultados de jtable de java

Estoy intentando eliminar registros pero se me presenta un problema al eliminar varios, pues el siguiente codigo int[] rows = datalistado.getSelectedRows(); sólo me regresa una.

Este es mi código:

   public void leeRifIdentif(){
         String RIF;
         int cont=0;
         modelo = (DefaultTableModel)this.datalistado.getModel();
            int[] rows = datalistado.getSelectedRows();     
            for(int i = 0; i < rows.length; i++){
                RIF=((String)modelo.getValueAt(i, 1));
                cont++;
                 try{
                     ps =cn.prepareStatement("DELETE FROM cliente WHERE rif=?");
                     String rif = String.valueOf(RIF);
                     ps.setString(1,rif);
                     ps.executeUpdate();
                     MostrarDatos(false);
                     VaciarCampos();                              
                    }catch(SQLException e){
                         System.out.println(e.getMessage());
                   }
           }     
            if(cont == (int)rows.length){
                 CboCampo.setSelected(false);
           }
   } 

nota: me regresa sólo un registro y he seleccionado varios

0
задан 27.12.2016, 10:34
0 ответов

Как я сказал раньше, мое серьезное решение хранить все отборные rif. Я сделал бы это таким:

1-Использовать класс LinkedList, чтобы хранить rif

LinkedList<Integer> listaRIF = new LinkedList<>();

создавать событие слушания jtable

 private void jTable1MousePressed(MouseEvent evt) {                                     
    int fila = jTable1.getSelectedRow();
    listaRIF.add(Integer.parseInt((String) jTable1.getValueAt(fila, 0)));
}  

То, что он сделает, он состоит в том, чтобы захватывать каждый раз, когда ты выбираешь ячейку.

Следующее было бы: Создавать кнопку "Eliminar", где пробежит все rif, которые ты выберешь в предыдущем методе.

  private void jButton1ActionPerformed(ActionEvent evt) {                                         
    for (int i = 0; i < listaRIF.size(); i++) {
       //haces la eliminacion  como lo planteaste hace un rato
        System.out.println(listaRIF.get(i));

    }

} 
1
ответ дан 03.12.2019, 17:58
  • 1
    listaRIF.add (Integer.parseInt ((String) jTable1.getValueAt (линия, 0))); он дает мне ошибку –  28.12.2016, 04:36
  • 2
    он дает мне ошибку listaRIF.add (Integer.parseInt ((String) jTable1.getValueAt (линия, 0))); он не добавляет меня к списку –  28.12.2016, 04:37

Я думаю, что это у тебя есть плохо:

RIF=((String)modelo.getValueAt(i, 1));

Он должен бы быть

RIF=((String)modelo.getValueAt(rows[i], 1));

С datalistado.getSelectedRows (); ты выбираешь все ЯВНЫЕ линии, я отношусь выходя ему на Ctrl и выбирая их и думаю, что у тебя есть в поле одном checkbox, и ты хочешь взять тех, у которых есть отборный checkbox, так что оно должно бы быть нечто похожим:

         DefaultTableModel modelo = (DefaultTableModel)this.datalistado.getModel();
        List<Integer> rows=new ArrayList<Integer>();
introducir el código aquí
            //Metemos las filas con el textbox a true en un array
            for(int i=0;i<modelo.getRowCount();i++)
            {
                //Suponiendo que el checkbox es la columna 1(0)
                System.out.println(modelo.getValueAt(i,0));
                if(modelo.getValueAt(i,0)!=null && modelo.getValueAt(i,0).equals(true))
                 rows.add(i);
            }

        for(int i = 0; i < rows.size(); i++){ //Codigo de borrado de cada fila }

Будь осторожен несмотря на то, что обнови таблицу перед тем, как удалять все в базе данных, из-за которой ты можешь удалять другие линии, отличные от отборных, так что ты можешь:

1. Удалять их в базе данных и удалив все обновлять таблицу. 2. Удалять с for наоборот с последней линии, выбранной даже первую. 3. Удалять их с forEach.

Привет.

1
ответ дан 03.12.2019, 17:58
  • 1
    я осложняюсь себе, потому что он просит iniciliazar список и не как –  28.12.2016, 04:58