[Resolvido] JTable.getSelectedValue() retorna -1

4 respostas
C

Ola amigos, estou com problemas em um JTable, ao usar o comando getSelectedValue() retorna -1.
Tenho valores na tabela, com o comando getValueAt(getSelectedValue() +1, 1), eu consigo o valor existente na posição 1,1 da tabela.
Não consegui encontrar erros na tabela, outras tabelas criadas funcionam perfeitamente, e o comando está normal.
Segue trechos de codigo que funcionam e que não funcionam, respectivamente:
Não funciona:

pnlTabela = new javax.swing.JPanel();
pnlTabela.setBounds(0, 0, 880, 300);
pnlTabela.setLayout(null);
this.add(pnlTabela);
        
model = new controller.Financeiro().criarTabela();
        
tblFinanceiro = new javax.swing.JTable(model);
tblFinanceiro.setBounds(0, 0, 880, 300);
        
jspTabela = new javax.swing.JScrollPane(tblFinanceiro);
jspTabela.setBounds(0, 0, 880, 300);
pnlTabela.add(jspTabela);

public String getCodigoSelecionado(){
	return (String) tblFinanceiro.getValueAt(tblFinanceiro.getSelectedRow(), 1);
}

Funciona:

model = new controller.CNAE().criarTabela();
jtbTabela = new javax.swing.JTable(model);
jspTabela = new javax.swing.JScrollPane(jtbTabela);
tablePane.add(jspTabela);

public void btnSelectActionPerformed(ActionEvent evt) {
    str = (String) jtbTabela.getValueAt(jtbTabela.getSelectedRow(), 0);
this.dispose();
}

Procurei no Google e utilizei a busca aqui no fórum com os termos JTable e tambem getSelectedValue(),
Não consegui encontrar a solução, embora tenha encontrado diversos tópicos sobre o assunto, nenhum se adequava ao meu caso.
Desde já grato pela atenção.

4 Respostas

B

Para pegar o valor de uma linha selecionada, use “ListSelectionModel”.
Aqui vai um exemplo:

ListSelectionModel rowSM = table.getSelectionModel();  
rowSM.addListSelectionListener(new ListSelectionListener() {  
                public void valueChanged(ListSelectionEvent e) {  
                    //Ignora as mensagens de quando a seleção ainda não tiver terminado  
                    if (e.getValueIsAdjusting()) return;  
  
                    ListSelectionModel lsm = (ListSelectionModel)e.getSource();  
                    if (!lsm.isSelectionEmpty()) {  
                        int selectedRow = lsm.getMinSelectionIndex();  
                        System.out.println("Linha " + selectedRow + " selecionada");  
                    }  
                }  
            });
C

Olá, agradeço a resposta, infelizmente a solução proposta ainda não retorna a linha selecionada.
Creio que o código esteja correto, na verdade mesmo o código que estou usando deveria funcionar, tenho varias tabelas e esta é a única que não retorna a linha selecionada. Não consegui encontrar nada errado com a construção da tabela em si, mas creio que estou deixando passar algo…
Mais uma vez, obrigado pela resposta, se houver alguma outra sugestão estou atento. :]

Correção: Eu havia aplicado o código de maneira incorreta, funcionou sim. Muito obrigado.
P.S.: Como coloco resolvido?

B

Essa maneira como demonstrei, é a correta. Viny que me indicou essa maneira, pois é a que estava na documentação.

Para colocar como resolvido, edite seu primeiro post e altere o título.
Valeu, abraço.

C

De fato é correta e solucionou meu problema, agradeço imensamente. :slight_smile:
[]'s.
Att. César Lobo

Criado 31 de julho de 2014
Ultima resposta 4 de ago. de 2014
Respostas 4
Participantes 2