I'm trying to fill in the fields of a form as the item clicked on jTable. Text fields are filled in normally, but the comboBox remains with the default value selected.
//método que preenche a comboBox
public void fillCBFornecedor(){
fornCtrl = new FornecedorControle();
cbFornecedor.removeAllItems();
for(Object fornecedor: fornCtrl.listar()){
cbFornecedor.addItem(fornecedor);
}
}//aqui eu preencho a ComboBox com os itens trazidos da camada de controle(abaixo) que usa a camada DAO para fazer a busca no banco
//método que preenche a jTable
private void fillJTProdutos(){
prodCtrl = new ProdutoControle();
jtProdutos.removeAll();
jtProdutos.setModel(prodCtrl);
}//aqui eu uso a camada de controle que implementa uma AbstractTableModel para preencher minha JTable
//preenche os campos conforme o item clicado
private void fillCampos(){
txtProduto.setText((String) jtProdutos.getValueAt(jtProdutos.getSelectedRow(), 0));
cbFornecedor.setSelectedItem(jtProdutos.getValueAt(jtProdutos.getSelectedRow(), 1));
cbMarca.setSelectedItem(jtProdutos.getValueAt(jtProdutos.getSelectedRow(), 2));
cbGenero.setSelectedItem(jtProdutos.getValueAt(jtProdutos.getSelectedRow(), 3));
txtValor.setText(String.valueOf((Float) jtProdutos.getValueAt(jtProdutos.getSelectedRow(), 4)));
txtMin.setText(String.valueOf((Integer) jtProdutos.getValueAt(jtProdutos.getSelectedRow(), 5)));
txtMax.setText(String.valueOf((Integer) jtProdutos.getValueAt(jtProdutos.getSelectedRow(), 6)));
}
//atributos e métodos da camada de controle
public class ProdutoControle extends AbstractTableModel{
private final ProdutoDAO pDAO = new ProdutoDAO();
private Produto produto;
private Marca marca;
private Genero genero;
private Fornecedor fornecedor;
@Override
public String getColumnName(int coluna) {
return colunas[coluna];
}
@Override
public int getRowCount() {
return pDAO.buscar().size();
}
@Override
public int getColumnCount() {
return colunas.length;
}
@Override
public Object getValueAt(int linha, int coluna) {
switch(coluna){
case 0:
return pDAO.buscar().get(linha).getDescricao();
case 1:
return pDAO.buscar().get(linha).getMarca();
case 2:
return pDAO.buscar().get(linha).getGenero();
case 3:
return pDAO.buscar().get(linha).getFornecedor();
case 4:
return pDAO.buscar().get(linha).getValor_unitario();
case 5:
return pDAO.buscar().get(linha).getEstoque_min();
case 6:
return pDAO.buscar().get(linha).getEstoque_max();
default:
return null;
}
}
//atributos e métodos da camada DAO
public class ProdutoDAO {
private Connection con = null;
private PreparedStatement stmt = null;
private ResultSet rs = null;
String sql = null;
private Produto produto;
private Fornecedor fornecedor;
private Marca marca;
private Genero genero;
public List<Produto> buscar(){
con = ConexaoBanco.getConexao();
List<Produto> produtos = new ArrayList<>();
sql = "SELECT * FROM view_produtos";
try{
stmt = con.prepareStatement(sql);
rs = stmt.executeQuery();
while(rs.next()){
fornecedor = new Fornecedor();
marca = new Marca();
genero = new Genero();
produto = new Produto(marca, genero, fornecedor);
produto.setId(rs.getInt(1));
produto.setDescricao(rs.getString(2));
produto.getMarca().setDescricao(rs.getString(3));
produto.getGenero().setDescricao(rs.getString(4));
produto.getFornecedor().setRazao_social(rs.getString(5));
produto.setValor_unitario(rs.getFloat(6));
produto.setEstoque_min(rs.getInt(7));
produto.setEstoque_max(rs.getInt(8));
produto.setAtivo(rs.getInt(9));
produtos.add(produto);
}
}
catch(SQLException ex){
JOptionPane.showMessageDialog(null, ex, "Erro", 0);
}
finally{
ConexaoBanco.fechar(con, stmt, rs);
}
return produtos;
}//na camada DAO faço um select na view de produtos e preencho um objeto com os dados trazidos.
//Inicialização da ComboBox
cbFornecedor = new javax.swing.JComboBox();
cbFornecedor.setToolTipText("");
//evento click do mouse na tabela
private void jtProdutosMouseClicked(java.awt.event.MouseEvent evt) {
fillCampos();
}
Is there any way to define the selected item in the ComboBox as the selected item in JTable?