Olá, tenho um JComboBox que é preenchido com dados do banco, até ai tudo ok, nenhum erro.
O que eu quero é que quando o usuário for alterar os dados da tela que tenha esse JComboBox ele não precise alterar o item que está sendo exibo nele para poder pegar o ID.
Se o item não for alterado gera o erro:
class java.lang.String cannot be cast to class model.CategoriaModel (java.lang.String is in module java.base of loader ‘bootstrap’; model.CategoriaModel is in unnamed module of loader ‘app’)
Se alterar item do JComboBox funciona corretamente, porém, se não fizer nada nele é gerado o erro acima.
Exemplo:
**Tela Cadastro de Produtos **
Nome do produto: Guaraná 2 litros
Categoria: Refrigerante
Preço: 4,00
Quantidade: 10
O usuário chama a tela de produtos para alterar apenas o preço do produto de 4,00 para 4,50 e não altera mais nada, só o preço.
Código usado no projeto.
//Getters e Setters
public class CategoriaModel {
private int catid;
private String catdescricao;
public CategoriaModel() {
}
public CategoriaModel(int catid) {
this.catid = catid;
}
public CategoriaModel(int id, String descricao) {
this.catid = id;
this.catdescricao = descricao;
}
public int getCatid() {
return catid;
}
public void setCatid(int catid) {
this.catid = catid;
}
public String getCatdescricao() {
return catdescricao;
}
public void setCatdescricao(String catdescricao) {
this.catdescricao = catdescricao;
}
@Override
public String toString() {
return getCatdescricao();
}
}
Controle banco de dados
public class CategoriaControle {
//carrega combo
public List<CategoriaModel> getCarregaCombo() {
strSQL = "select * from categoria order by catdescricao";
try {
List<CategoriaModel> lista = new ArrayList<>();
pst = conexao.getConexao().prepareStatement(strSQL);
rs = pst.executeQuery();
while (rs.next()) {
// criando o objeto CategoriaModel
CategoriaModel categoria = new CategoriaModel();
categoria.setCatid(rs.getInt("catid"));
categoria.setCatdescricao(rs.getString("catdescricao"));
// adicionando o objeto à lista
lista.add(categoria);
}
rs.close();
pst.close();
return lista;
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
//pesquisa categoria por codigo
public CategoriaModel setCategoria(int codigo) throws Exception {
strSQL = "select * from categoria where catid = ? order by catdescricao";
pst = conexao.getConexao().prepareStatement(strSQL);
pst.setInt(1, codigo);
rs = pst.executeQuery();
if (!rs.next()) {
return null;
}
return new CategoriaModel(rs.getInt("catid"),
rs.getString("catdescricao"));
}
}
Tela Cadastro de Produtos
Códigos responsáveis pela manipulação dos dados
public class jifProduto extends javax.swing.JInternalFrame {
private void getComboCategoria() {
try {
CategoriaControle categoria = new CategoriaControle();
jcbCategoria.removeAllItems();
categoria.getCarregaCombo().forEach((c) -> {
jcbCategoria.addItem(c);
jcbCategoria.setSelectedIndex(-1);
});
} catch (Exception ex) {
JOptionPane.showMessageDialog(null, ex.getMessage(), getTitle(),
JOptionPane.ERROR_MESSAGE);
}
}
private void setCarregaProdutos(int id) throws Exception {
List<Produto> lista = new ProdutoControle().setCarregaProdutosPorCodigo(id);
for (Produto pro : lista) {
String categoria = String.valueOf(
new CategoriaControle().setCategoria(pro.getProcatid()));
jcbCategoria.getModel().setSelectedItem(categoria);
String fornecedor = String.valueOf(
new FornecedorControle().setFornecedor(pro.getProforid()));
jcbFornecedor.getModel().setSelectedItem(fornecedor);
jtfDescricao.setText(pro.getProdescricao());
jftPreco.setText(String.format("%.2f", pro.getPropreco()));
jftQuantidade.setText(String.valueOf(pro.getProquantidade()));
}
}
//coloca a Tela de Cadastros de Produtos no modo de edição dos dados
private void jbtEditarDadosActionPerformed(java.awt.event.ActionEvent evt) {
if (jtbProduto.getSelectedRow() != -1) {
try {
int linha = jtbProduto.getSelectedRow();
codigo = Integer.parseInt(jtbProduto.getValueAt(linha, 0).toString());
setCarregaProdutos(codigo);
inclusao = false;
CardLayout cl = (CardLayout) jplGeral.getLayout();
cl.show(jplGeral, "detalhes");
} catch (Exception ex) {
JOptionPane.showMessageDialog(null, "Erro: " + ex.getMessage());
}
} else {
JOptionPane.showMessageDialog(null, "Selecione um registro da tabela para alteração.",
this.getTitle(), JOptionPane.INFORMATION_MESSAGE);
}
}
//salva as alterações feitas na Tela de Cadastros de Produtos
private void jbtSalvarActionPerformed(java.awt.event.ActionEvent evt) {
String mensagem;
try {
if (validaCampos()) {
Produto p = new Produto();
p.setProdescricao(jtfDescricao.getText());
p.setPropreco(Double.parseDouble(jftPreco.getText().replace(",", ".")));
p.setProquantidade(Integer.parseInt(jftQuantidade.getText()));
CategoriaModel c = (CategoriaModel) jcbCategoria.getSelectedItem();
p.setProcatid(c.getCatid());
if (inclusao) {
new ProdutoControle().Incluir(p);
mensagem = "Dados incluídos no sistema com sucesso.";
} else {
p.setProid(codigo);
new ProdutoControle().Alterar(p);
mensagem = "Dados alterados no sistema com sucesso.";
}
JOptionPane.showMessageDialog(null, mensagem);
CarregaJTable();
}
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "Erro: " + e.getMessage(),
getTitle(), JOptionPane.ERROR_MESSAGE);
}
}
}