Vinculação JTable + JTextField

E ae turma, bem estou tentando fazer uma vinculação entre uma jtable e alguns textfields, quero que cada vez que uma linha seja selecianada os dados daquela linha apareçam nos jtextfields que existem ao lado da mesma. Descobri que isso se consegue usando a ferramenta vincalação do netbeans. Mas não estou conseguindo fazer a mesma. Em um vídeo eu vi sendo feito vinculando a propriedade text do jtextfield a propriedade selectedElement da Jtable. Mas mas na expressão de vinculação o cara tinha essa expressão ${selectedElement.codBanco} mas no meu caso não sei o que coloco ${selectedElement}. já tentei colocar o titulo da coluna ${selectedElement.CNPJ}, o nome da coluna no resultset ${selectedElement.empcnpj} mas não consigo.

Quero tb que a medida q o conteúdo exibido nos jtexfields forem sendo alterados eles sejam alterados ao mesmo tempo na jtable, ou seja, apagou uma letra automaticamente ja apegue tb na jtable. Sei que isso se con segue tb com vinculação, mas estou perdido.

Grato gente.

Deixa eu ter dar umas dicas se eu raalmente entendi o que você quer

1º vá ate seu Jtable e clique sobre sobre com o botão direito e vá até Mouse>>>MouseClicked (isso no netbeans)
2º abrirá um espaço para você digitar o código entao escreva laá o seguinte

if (suaTabela.isColumnSelected(colunaqueestaovalor)) { seuJtextField.setText(valordatabela) }

Acredito que seja isso.

sim sim, isso funciona para exibir os dados nos jtextfields mas e para fazer com que com que os dados na jtable sejam atualizados automaticamente a medida que se digita nos textfields. Tipo, clicou em uma linha aparece os dados nos textfields, vai no textfield apaga uma letra automaticamente já apaga na tabela tb.

Tenta usar o KeyPressed dentro do TextFields sempre setando a celula com o conteudo do TextField.

Valeu

Pow brother eu até pensei nessas soluções usando os eventos, mas será que isso não vai lascar com a perfromace não? pq tipo cada tecla digitada vai disparar o evento.

Axo que usando vinculações ficaria melhor, não?

O Java já dispara uma série de eventos para cada tecla digitada, mesmo que você não coloque nenhum listener para eles.

O ideal é escrever um Document. E esse document, sim, atualizar seu TableModel. Até porque, o KeyPress não pegará CTRL+C e CTRL+V, principalmente os feitos pelo mouse.

Tem como sair um pontapé inicial? Nunca usei Document

Tem sim, dê uma olhada no artigo:
Controlando um JTextField

Ele usa o document pra outra coisa, mas vc adapta a partir daí.

Poderia lançar o evento só quando ele perder o foco também.

Ai ele dó lançaria o evento uma vez.

A tá, lembrei o que são documents, já usei sim, várias vezes, eu usava para controlar mascaras e a quantidades máxima de caracteres que o textfield pode receber, só não lembrava do nome :lol:

Só um detalhe, tem algum evendo que controla a seleção de linha na jtable? pq tipo se eu fizer usando MouseClicked vou ter que fazer tb para KeyPress pq a seleção de linha tb pode ser feita pelo teclado usando as setas direcionais. Tem algum evento que controle a seleção de linhas independente do modo de entrada(teclado ou mouse)?

Valeu, pela ajuda pessoal.

Bah eu não sei te dizer.

seuTable.getSelecionModel().addListSelectionListener().

Valeu gente.

Deixa eu por em prática

Olá gente, bem eu ja sabia que iam aparecer problemas, bem olha só, para colocar os textos nos textfields usei o metodo getComponents() para pega-los de um jpanel. Criei um método para pegar o array e setar o valor para cada testfield, caso o elemento seja um combobox ele da um addItem().

Começou a apresentar problemas pois os dados eram colocados forra de ordem, para ter uma noção de como estava a ordem do array mandei imprimir os componentes. No array existem 22 componentes maa a linha de impressão imprime 44 componentes.

    public void getValueToTextFields(List<List> dados,
            Component[] componentes, int linha){

        for(int i = 0, i2 = 0; i < componentes.length; i++) {

            System.out.println(componentes[i].getClass().getSimpleName());
            System.out.println(componentes.length);

            if(componentes[i] instanceof JTextField)
                ((JTextField)componentes[i]).setText((String) dados.get(linha).get(i2++));

            else if(componentes[i] instanceof JComboBox)
                ((JComboBox)componentes[i]).addItem((String) dados.get(linha).get(i2++));
        }


    }

Esse metodo é só para fins de teste depois irei melhora-lo

O que quero saber é pq a linha

Está imprimindo 44 componentes se no array só existem 22

Hohoho ViniGodoy, olha só essa cágado…

descobri o problema…

o problema é que o evento ListSelectionListner está sendo chamado duas vezes, uma quando o botão do mouse é apertado e outra quando ele é solto.

Não sei se inplementei o evento de forma correta.

        jtableemprega.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
            public void valueChanged(ListSelectionEvent e) {
                jtableempresaActionPerformed(e);
            }
        });

Era assim que vc tinha em mente?
Alguma maneira de evitar essa chamada dulpla?

        jtableemprega.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
            public void valueChanged(ListSelectionEvent e) {
                if (e.getValueIsAdjusting()) 
                    return;

                jtableempresaActionPerformed(e);
            }
        });

É só ler a documentação ou o how to.

Boa tarde,
Estou com um problema em vincular meus dados do JTable para o JTextField
No momento em que eu dou um click em algum campo da tabela, ele me volta apenas com o meu primeiro registro.
Por exemplo quando eu dou um click na 1ª linha ele me volta com o primeiro registro do meu banco de dados.
Mas quando eu dou um click na segunda linha, ele ainda me volta com o primeiro registro do meu banco de dados. :frowning:

private void TabelaQualidadeMouseClicked(java.awt.event.MouseEvent evt) {

try
{

if (TabelaQualidade.getSelectedRow() > -1)


    texfield.setText(con_pq.resultset.getString("doc2"));
else
return;

}
catch(SQLException erro)
{
    JOptionPane.showMessageDialog(null, "Não Existe dados");
}