Recuperar linha selecionada de JTable

9 respostas
W

Prezados,
após longa pesquisa para implementar um JTable, cheguei num ponto que preciso de ajuda.
Preciso simplesmente recuperar os valores da linha que eu selecionar e armazenar em alguma estrutura(array, vetor, qq coisa) e depois mostrar esses dados nos campos da tela, ou seja, o problema está em pegar os dados da linha selecionada.

Já fui em dezenas de fóruns e não consegui implementar como recuperar os valores da linha.
Li em algum lugar que há outra implementação pra não ter tantos métodos vazios, como abaixo:

Criei uma classe pra tratar o evento
class TableHandler implements MouseListener{

		@Override
		public void mouseClicked(MouseEvent e) {
		 if  (e.getButton() == MouseEvent.BUTTON1 && e.getClickCount() == 2) {  
			 JDialog.setDefaultLookAndFeelDecorated(true);
			 JOptionPane.showMessageDialog(null, "Clicou com botão esquerdo", "Atenção", JOptionPane.ERROR_MESSAGE);
                         //O evento funciona <------------------------
                         //Como recuperar os dados da linha selecionada? 
		 } 

		@Override
		public void mouseEntered(MouseEvent e) {
			// TODO Auto-generated method stub
			
		}

		@Override
		public void mouseExited(MouseEvent e) {
			// TODO Auto-generated method stub
			
		}

		@Override
		public void mousePressed(MouseEvent e) {
			// TODO Auto-generated method stub
			
		}

		@Override
		public void mouseReleased(MouseEvent e) {
			// TODO Auto-generated method stub
			
		}	
    }
Trecho que salva os dados na tabela.
tabela = (DefaultTableModel)jTableAgenda.getModel(); 
		tabela.setRowCount(0);
		if(!listaAgenda.isEmpty()){
			Iterator<Agenda> it = listaAgenda.iterator();			
			while(it.hasNext()){
				Agenda agenda = (Agenda) it.next();
				int codHor = agenda.getCodHorario();
				Horario horario = TelaLogin.dBServices.obterHorarioPorChave(codHor);
				Cliente cliente = TelaLogin.dBServices.obterClientePorChave(agenda.getCodCliente());
				Servicos servico = TelaLogin.dBServices.obterServicosPorChave(agenda.getCodServ());
				String situacao = agenda.getSituacao();
				String dataAgen = DateUtil.format(agenda.getDataAg());
				
				Vector<Object> elementos = new Vector<Object>();
				elementos.add(dataAgen);
        		elementos.add(horario);
        		elementos.add(cliente);
        		elementos.add(servico);
        		elementos.add(situacao);	
        		
        		       		
        		tabela.insertRow(0,elementos);
			}
		}

Agradeço a atenção.

9 Respostas

Marky.Vasconcelos

Primeiro. Não use DefaultTableModel(Novo movimento do GUJ).

Veja na minha assinatura o link para aprender mais sobre isso.

ViniGodoy

Faço minhas as palavras do Mark, afinal, eu praticamente iniciei esse movimento.

mister_m

Eu vou um pouco mais longe: a menos que seja um projeto de brinquedo (que não parece ser), utilize um framework desktop pra não ficar batendo cabeça, como o genesis ou JGoodies ou whatever. Isso que você está fazendo é quase como fazer aplicação web só com jsp…

Marky.Vasconcelos

Como assim voce iniciou o movimento?
Eu que lancei uma discreta idéia no ar e o povo aderiu :stuck_out_tongue:
Mas voce é o evangelizador original, realmente, praticamente quase iniciou o movimento, e voce sempre terá seus créditos. :wink:

ViniGodoy

Mark_Ameba:
Como assim voce iniciou o movimento?
Eu que lancei uma discreta idéia no ar e o povo aderiu :stuck_out_tongue:
Mas voce é o evangelizador original, realmente, praticamente quase iniciou o movimento, e voce sempre terá seus créditos. :wink:

ahahahah.

Ok, mas o mais importante é que o povo não use o DefaultTableModel.

W

Realmente não é um projeto de brinquedo. Não é uma aplicação corporativa, mas é um sistema que deverá entrar em produção muito em breve.

Essa aplicação foi criada “na raça”, primeiro tentando desenhar as telas na unha, depois, vendo que era impossível, utilizo o netbeans para o desenvolvimento das telas.

Gostaria que me desse uma idéia sobre como usar esses frameworks que vc mencionou e o que está errado de acordo com sua colocação.

Isso que você está fazendo é quase como fazer aplicação web só com jsp…

Sobre não usar o DefaultTableModel, vou pesquisar, mas se puderem dar uma explanada do porque não utilizar fico grato. Lembrando que comecei a conhecer o swing “fuçando” os componentes pra criar esse sistema, ou seja, não sou um conhecedor avançado.

M

Um motivo já foi citado logo acima. Se você ver o link que te foi recomendado, lá explica o motivo para não usar DefaultTableModel e tem os links para exemplos da maneira certa de se fazer.

ViniGodoy:

Ok, mas o mais importante é que o povo não use o DefaultTableModel.

Exatamente… não importa quem criou o movimento. :slight_smile:

W

Quando eu disse impossível, foi mais pra valorizar a dificuldade de fazer telas avançadas na mão, pois com o netbeans, é extremamente mais fácil. Com relação ao código gerado automaticamente, concordo plenamente, é muito ruim, grande e difícil de entender.

Já olhei e pesquisarei com mais calma, pois tenho várias tabelas no sistema (todas criadas no netbeans) que preciso fazer funcionar conforme o assunto do tópico.

Vlw

erico_kl

bom… se você utilizar o ObjectTableModel do Mark_Ameba pra você recuperar os dados da linha (que será um objeto) apenas com um getValue(linha) você consegue…
eu utilizo o ObjectTableModel mas pra buscar o valor eu pego somente o código e faço uma pesquisa no banco pra pegar os valores atualizados… (pois existem vários clientes conectados em um servidor)

Criado 9 de março de 2010
Ultima resposta 15 de mar. de 2010
Respostas 9
Participantes 6