I try several times in a Swing form so that when selecting the option in the JCombobox the column item value of the same row appears in the JTextField. Once I was able to do this logic however it was with JDBC and some functions that I used for this purpose I did not keep in the DAO interface doing them in the mouseClicked JComboBox event itself. They looked like this:
MySQLProductData 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 ViewPrices:
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);
}
}
}
Bank:
+----+-------------+---------------+
| 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 already tried to get the value selected by the user, compare with the field of the database productName to print the value in the JTextField and even then I could not. What I want is to make the time the user select the product in the JComboBox to display the value in the JTextField next (unit value) in JPA. Example: When "Product A is selected in the cbProductName the value displayed in the JTextField is 32.44 (float).