Excluir mais de uma linha simultâneamente a partir de linhas selecionadas no JTable

5 respostas
levimendes

Olá pessoal, eu estou carregando um JTable com valores vindo de uma base de dados Access, meu cliente quer que o sistema seja capaz de ao selecionar mais que uma linha, possa ser feita a excluxão dos registros selecionados, alguém já fez este tipo de tarefa?

5 Respostas

ViniGodoy

Sim. O JTable tem o método getSelectedRows(), que te retorna todas as linhas que estão selecionadas.

levimendes

Mas como eu faço para vincular as linhas selecionadas do JTable com os registros do BD?

ViniGodoy

Você pede os objetos para o seu model. E aí chama o DAO para excluí-los.

Se você não usa um TableModel próprio e ainda está insistindo na estupidez de se manter com o Default, você terá que guardar o ID numa das colunas, e pegar esses ids com getValueAt.

J

levi, eh exatamente isso q o Vini falou. E para ser mais especifico vc faz o seguinte:

1° Salve todos os ids dentro de uma coluna hidden na tabela quando for preenche-la. Para isso basta setar na coluna os seguintes atributos:

suaColuna.setMinWidth(0);

suaColuna.setMaxWidth(0);

2° Pega todas as linhas selecionados através do método suaTabela.getSelectedRows(), e coloque em uma lista .

3° Agora pegue o id de cada registro q ele ker excluir, atraves do método suaTabela.getValueAt(a, b). Onde “a” é o numero do registro da tabela q vc deseja obter algum valor, e “b” é o numero da coluna q vc quer. Se a sua primeira coluna for o ID então “b” será 0.

4° Agora q tem os ID’s manda manda excluir essas paradas… :stuck_out_tongue:

Acho q agora da pra entender…

ahUAHuaUA

obs: Essa não é a melhor solução, mas para esse caso, acho q fica mais facil pro amigo entender.

levimendes

vinigodoy, estou tentando implementar a sua idéia (usando o TableModel):

public void excluirAluno(Aluno... aluno) {
		String sqlExcluir = "delete from Aluno where codigo = ?";
		
		for (Aluno alu : aluno) {
			try {
				
				PreparedStatement pstm = conexao.prepareStatement(sqlExcluir);
				pstm.setInt(0, alu.getCodigo());
				pstm.execute();
                                                                pstm.close();
				
			} catch(Exception ex) {
				throw new RuntimeException(ex);
			}
		}
	}

porém estou confuso na hora de realizar a chamada pegando os dados do TableModel… :?: :?: :?: :?:

Criado 22 de outubro de 2010
Ultima resposta 22 de out. de 2010
Respostas 5
Participantes 3