Select item in Jcombobox and return associated value in Jtextfield in JPA

Asked

Viewed 756 times

0

I try several times in a Swing form to make sure that when selecting the option in Jcombobox the value of the item in the column of the same row appears in Jtextfield. Once I managed to do this logic but it was with JDBC and some functions I used for this purpose I did not keep in the interfaceDAO doing them in the event of the Jcombobox mouseClicked. Stayed like this:

Mysqlproduced class:

public class MySQLProdutoDAO implements ProdutoDAO {

    private ConnectionFactory cf = null;

    public MySQLProdutoDAO(ConnectionFactory cf) {
        this.cf = cf;
    }
    
    
    /*  Métodos inserir, alterar e excluir */
    
    @Override
    public List<Produto> listar() {
        cf = new ConnectionFactory();
        cf.createEm().getTransaction().begin();
        //pedido = *, Pedido = nome da tabela
        Query consulta = cf.createEm().createQuery("select produto from Produto produto");
        List<Produto> produtos = consulta.getResultList();
        cf.createEm().getTransaction().commit();
        cf.close();
        return produtos;
    }
    
    public List<Produto> pesquisarPorNome(String nomeProduto){
        String jpql = "select nomeProduto from Produto p where nomeProduto = :name";
        List<Produto> produtos =  cf.createEm().createQuery(jpql).setParameter("name", nomeProduto).getResultList();
        return produtos;
    }
    /* tentei usar a lógica do select nomeProduto from Produto where nomeProduto = 'Produto A' para que ele exiba o nome do produto na coluna do banco e compare com o valor que o cliente escolheu; */
    
    public List receberValorUnitario(String nomeProduto){
        String jpql = "select valorUnitario from Produto p where nomeProduto = :produto";
        List valor = cf.createEm().createQuery(jpql).setParameter("produto", nomeProduto).getResultList();
        return valor;
    }
    /* e aqui para exibir o valor correspondente se a lógica acima produto selecionado == produto consultado no banco esteja correta retornando o respectivo valor em float */ 
    
}

And in the Swing form Viewpedidos:

public class ViewPedidos extends javax.swing.JInternalFrame {

    /*   Atributos, getters, setters */
    
    public ViewPedidos(DAOManager manager) throws DAOException {
        initComponents();
        atualizarTabela(manager);
        habilitarTextFieldEBotoes();
        List<Cliente> clientes = new ArrayList<Cliente>();
        List<Produto> produtos = new ArrayList<Produto>();
        clientes = manager.getClienteDAO().listar();
        produtos = manager.getProdutoDAO().listar();
        cbCodCliente.setModel(new DefaultComboBoxModel(clientes.toArray()));
        cbNomeProduto.setModel(new DefaultComboBoxModel(produtos.toArray()));
    }
    
    /* ....... */
    
    private void cbNomeProdutoActionPerformed(java.awt.event.ActionEvent evt) {                                              
      /* Exemplo realizado em JDBC */
         try {
        
        Connection con1 = DriverManager.getConnection("jdbc:mysql://localhost:3306/loja","root","");
        Statement stm1 = con1.createStatement();
        ResultSet rs1 = stm1.executeQuery("SELECT * FROM produto WHERE nomeProduto = '" + this.cbNomeProduto.getSelectedItem() + "'");
        while(rs1.next()){
            tfValor.setText(String.valueOf(rs1.getFloat("valorUnitario")));
        }
    } catch (SQLException ex) {
        JOptionPane.showMessageDialog(null, ex);
    }    
} 
    
 
}

Bench:

+----+-------------+---------------+
| id | nomeProduto | valorUnitario |
+----+-------------+---------------+
|  1 | Produto A   |         32.44 |
|  2 | Produto B   |          75.5 |
|  3 | Produto C   |         12.99 |
|  4 | Produto D   |         15.84 |
|  5 | Produto E   |          25.5 |
|  6 | Produto F   |          5.59 |
|  7 | Produto G   |          9.99 |
|  8 | Produto H   |         45.59 |
|  9 | Produto I   |         22.51 |
+----+-------------+---------------+

I have already tried to take the value selected by the user, compare with the field of the database nameProduct then print the value in Jtextfield and still could not. What I want is to make sure that when the user selects the product in Jcombobox the value in Jtextfield is displayed on the side (unit value) in JPA. Example: When "Product A is selected in cbNomeProduct the value displayed in Jtextfield is 32.44 (float).

Exemplo de funcionamento do evento

  • Please add a [mcve] so you can run the code and simulate the problem.

  • I just edited my publication @diegofm, in function cbNomeProdutoActionPerformed(evt) I wrote the solution of the problem in JDBC I just don’t know how a resultSet() in the JPA (I’m still learning how to use this framework) I ended up creating those two functions above: pesquisarPorNome() and receberValorUnitario() but I can’t think of a way to work with them in Swing.

  • What you’re looking for is only possible if create an own Combomodel. And to pick up the selected item on the combobox and do something with it, you need add a change event in this combo. The two answers that Linkei answered solve this question.

  • I will try to do this procedure as you mentioned, when I created this Jcombobox I ended up creating it through Link > Elements and I think this ended up disturbing to manipulate the Jcombobox I imagine.

No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.