Selecionar item jTable

2 respostas
Onimatsu

Boa tarde rapaziada.
Estou fazendo um botão de excluir que interage com uma tabela, por exemplo, quando o usuário selecionar uma célula e apertar o botão excluir toda a linha e o registro onde aquela célula está selecionada será removido. O problema é que assim que aperto o botão de excluir dá erro porque eu não estou conseguindo trazer a célula com o getSelectedRowCount. Haveria alguma outra forma de fazer isso? Agradeço quem conseguir me ajudar.
Meu código action performed ficou assim:

private void btExcluirActionPerformed(java.awt.event.ActionEvent evt) { // conta quantas pessoas estão selecionadas na tabela obs; i = linha e 0 = coluna. obs: matriz for (int i = 0; i < tabelaPrincipal.getRowCount(); i++) { if (tabelaPrincipal.getValueAt(i, 0) != null && tabelaPrincipal.getSelectedRowCount() > -1) { // qualquer indíce da tabela será maior que -1 RegistroLogico.remover((Registro) tabelaPrincipal.getValueAt(i, 0) ); } } // pergunta ao excluir if (cont > 0 && JOptionPane.showConfirmDialog(null, "Deseja excluir " ) == 0) { for (int i = 0; i < tabelaPrincipal.getRowCount(); i++) { if (tabelaPrincipal.getValueAt(i, 0) != null && tabelaPrincipal.getSelectedRowCount() > -1) { RegistroLogico.remover((Registro) tabelaPrincipal.getValueAt(i, 0)); } } // ao términar retornar tudo o que ficou no banco e mostrar na tabelaPricipal RegistroLogico.mostrarTudo(tabelaPrincipal); } }

2 Respostas

L

Olá Onimatsu, quantos registros voce quer remover de uma vez? Este codigo ta parecendo que ta removendo varios.

para so um registro, da uma olhada nesse codigo que fiz já faz um tempo:

private void removerActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_removerActionPerformed
         if(clicou == true){//se voce clicou no botão remover mas não selecionou a linha na tabela, ae da um erro abrindo um JOptionPane dizendo que vc tem que selecionar uma linha(registro).
            int linhaSelecionada = this.jTable1.getSelectedRow();//É selecionado o numero da linha
            String cod = this.jTable1.getValueAt(linhaSelecionada, 3).toString();  //setando para "cod" o codigo do registro que esta no banco de dados e o nome do individuo. 
            String nome = this.jTable1.getValueAt(linhaSelecionada, 1).toString();              
            Remover confirmar = new Remover(this, true);// aqui eu abro um jdialog so para confirmar a exclusão.
            confirmar.setVisible(true);  // mostra a jdialog em cima da tela principal
            if(confirmar.getCodigo() == 1){ //aqui na classe da jdialog remover eu setei 1 para sim e 0 para nao
             
                daoInd.remover(Integer.parseInt(cod)); // remove do banco de dados          
                popularTabela(); //popula novamente a tabela sem o registro excluido eh claro.
                fotoPrincipal.setUI(new BackgroundUI());// não lembro
                try{
                    File dir = new File("D://ArquivosDeProgramas/SAIC/" + nome.replaceAll(" ", "") + "/");
                    Dir_arquivo_del.deleteDir(dir); //apaga os arquivos relativos ao registro deletado
                }catch(IOException e){
                    JOptionPane.showMessageDialog(null, e.getMessage() + "Remover individuo",
                                                            "IOException erro", JOptionPane.ERROR_MESSAGE);
                }
                }
         } else {
                 JOptionPane.showMessageDialog(null, "Selecione individuo");
        }
    }//GEN-LAST:event_removerActionPerformed
Onimatsu

Opá valeu, seu código me rendeu algumas ideias e eu consegui fazer algumas alterações bom na verdade várias porque meu código ficou bastante diferente veja: int cont = 0; int indice = tabelaPrincipal.getSelectedRow(); // mostra o valor da linha selecionada System.out.println(indice); // somente para testes // conta quantas pessoas estão selecionadas na tabela obs; i = linha e 0 = coluna. obs: matriz for (int i = 0; i < tabelaPrincipal.getRowCount(); i++) { // percorre todas as linhas da tabela para verificar a existência de itens if (tabelaPrincipal.getValueAt(i, 0) != null) { // se houver algum valor na coluna 0 cont++ cont++; } } if (cont > 0) { // se existe valores o contador será maior que zero if (indice != -1) { // se algum item estiver selecionado o valor sempre será maior que -1 já que o menor indice da matriz é zero // pergunta ao excluir if (JOptionPane.showConfirmDialog(null, "Deseja excluir este item ?") == 0) { RegistroLogico.remover((Registro) tabelaPrincipal.getValueAt(indice, 0)); } } else { JOptionPane.showMessageDialog(null, "Deve selecionar um item para excluir."); } } else { JOptionPane.showMessageDialog(null, "Não existem itens para remover."); } // ao términar retornar tudo o que ficou no banco e mostra na tabelaPricipal RegistroLogico.mostrarTudo(tabelaPrincipal);Respondendo sua pergunta o código é tanto para remover um item como vários de uma só vez desde que estejam selecionados. Com o código acima eu consigo remover um item com perfeição mas para remover vários ainda não até porque eu só tenho um índice e não tenho ideia de como fazer ele reconhecer outros índices ao mesmo tempo. Por isso ainda vou deixar o tópico aberto até mais alguém do fórum responder. Obrigado pela força, tudo de bom.

Criado 16 de setembro de 2012
Ultima resposta 16 de set. de 2012
Respostas 2
Participantes 2