0
I am trying to fill in the form fields as per the item clicked on jTable. Text fields are normally filled in, but the combobox remains at the selected default value.
//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 Combobox according to the selected item in Jtable?
What if no line is selected? Disabled multiline selection?
– user28595
I didn’t get any treatment from the guy. The way the code is now the fields update whenever I change the line selection (I’m using the fillCampos() method in Jtable’s Mouseclicked event). When there is nothing selected in the table (on screen loading for example) the fields simply become empty
– Lucas Durigan
Brand, Gender and Supply have some unique identification field, like id? The reason for not selecting is that the combo object is not the same as in your table, at least in java. You need to "teach" java how to know when they are equal.
– user28595
Yes, they all have an id. How to do this check?
– Lucas Durigan