[RESOLVIDO] Não consigo setar no textField

Pessoal, seguinte:
Possuo este frame, onde ao clicar no botão ‘BUSCAR PRODUTO’ abre outro frame com a listagem dos produtos cadastrados:

Neste frame possui uma tabela de produtos. Ao dar um duplo click em uma linha, recupero o id do produto da linha clicada e retorno este id para o frame anterior. segue o código:

image

No método de retorno do ID, eu utilizo o dado retorno e busco no banco de dados o produto equivalente.

Pego as informações deste produto e tento setar em uma TextField.

image

o problema é que não seta. Consigo imprimir o valor no System out normalmente, como teste.
mas o valor não é setado no campo de texto dentro deste método.

Ja vi um artigo parecido: [Resolvido] Não seta valor no JtextField
mas não consegui resolver meu problema.

Alguém tem alguma dica?

Tem certeza de que não está criando outra instância da tela anterior?
Posta o código completo das duas telas.

staroski, estou usando o Swing, portanto é gerado aquele monte de código por traz.
É meu primeiro post, portanto, não sei se fica legal postar aquele mundo de codigo aqui, mas filtrei
o que estou utilizando, veja se da pra entender:

Na tela de listagem eu crio uma instancia do frame anterior para acessar o método retornaID.
------- Tela ‘principal’ ------------

public class GeracaoOcamento extends javax.swing.JFrame {

/**
 * Creates new form GeracaoOcamento
 */


public GeracaoOcamento() {
    initComponents();
    setLocationRelativeTo(null);
}


public void retornaID(ListaProdutos frameProdutos, int idSelecionado) {                
    ProdutoDAO pd = new ProdutoDAO();
    Produto produto = pd.buscarPorId(Produto.class, idSelecionado);
  
    txtNomeProduto.setText(produto.getNome());
    System.out.println(produto.getNome());
    
}

private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {                                         
   
      new ListaProdutos().setVisible(true);  
                   
}  

}

— TELA DE LISTAGEM DE PRODUTOS-----

public class ListaProdutos extends javax.swing.JFrame {

/**
 * Creates new form ListaClientes
 */
public ProdutoTableModel tableModel;
ProdutoDAO produtodao = new ProdutoDAO();
GeracaoOcamento geracaoOrcamento = new GeracaoOcamento();

public ListaProdutos() {
    initComponents();
    setLocationRelativeTo(null);

    tableModel = new ProdutoTableModel(produtodao.consultarTodos());

    tableLista.setModel(tableModel);
}   
                   

private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    CadastroProduto cp = new CadastroProduto();
    //DeskPane.add(cp);
    cp.setVisible(true);

    this.setVisible(false);

}                                        
          

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

    if (evt.getClickCount() == 2) {
        int linha = tableLista.getSelectedRow();
        int idSelecionado = (int) tableModel.getValueAt(linha, 0);
        geracaoOrcamento.retornaID(this, idSelecionado);
        this.setVisible(false);
}                                       
}

Muda o this.setVisible(false) para this.dispose(); e faz um teste.

O problema permaeceu… :frowning:

Para retornar valores nunca usei um JFrame sempre uso o JDialog, tenta mudar sua tela de busca para JDialog e pegar a variável idSelecionado

JDialog jd = new JDialog(this, true);

Ai no JFrame que recebe o retorno você coloca

int id = jd.idSelecionado;

O idSelecionado tem que ser public no JDialog

1 curtida

É que na classe GeracaoOcamento você cria um novo objeto do tipo ListaProdutos.
E na classe ListaProdutos você cria um novo objeto do tipo GeracaoOcamento, não pode, tem que usar o mesmo objeto GeracaoOcamento que abriu o ListaProdutos.

1 curtida

Galera, muito obrigado a ajuda de vc.

Segui as orientações de vcs. Transformei minha tela de busca em um JDialog, como deve ser e busquei o valor da variavel como o Rodrigo_de_Freitas sugeriu.

Muitíssimo obrigado pela atenção de vcs!

1 curtida