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);
}
}
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:
privatevoidremoverActionPerformed(java.awt.event.ActionEventevt){//GEN-FIRST:event_removerActionPerformedif(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).intlinhaSelecionada=this.jTable1.getSelectedRow();//É selecionado o numero da linhaStringcod=this.jTable1.getValueAt(linhaSelecionada,3).toString();//setando para "cod" o codigo do registro que esta no banco de dados e o nome do individuo. Stringnome=this.jTable1.getValueAt(linhaSelecionada,1).toString();Removerconfirmar=newRemover(this,true);// aqui eu abro um jdialog so para confirmar a exclusão.confirmar.setVisible(true);// mostra a jdialog em cima da tela principalif(confirmar.getCodigo()==1){//aqui na classe da jdialog remover eu setei 1 para sim e 0 para naodaoInd.remover(Integer.parseInt(cod));// remove do banco de dados popularTabela();//popula novamente a tabela sem o registro excluido eh claro.fotoPrincipal.setUI(newBackgroundUI());// não lembrotry{Filedir=newFile("D://ArquivosDeProgramas/SAIC/"+nome.replaceAll(" ","")+"/");Dir_arquivo_del.deleteDir(dir);//apaga os arquivos relativos ao registro deletado}catch(IOExceptione){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.