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).
Please add a [mcve] so you can run the code and simulate the problem.
– user28595
I just edited my publication @diegofm, in function
cbNomeProdutoActionPerformed(evt)
I wrote the solution of the problem inJDBC
I just don’t know how aresultSet()
in theJPA
(I’m still learning how to use this framework) I ended up creating those two functions above:pesquisarPorNome()
andreceberValorUnitario()
but I can’t think of a way to work with them in Swing.– Victor
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.
– user28595
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.
– Victor