Algo estranho aqui! =))) Ajuda - Cadastrar 2 jComboBox!

12 respostas
macdown

Olá pessoal, tudo bem?

Estou com um probleminha aqui!

Tenho um banco de dados que se chama cliente:

Tenho um JFrame com dois jComboBox que puxa os clientes dadastrados no banco de dados cliente.
Até ai tudo bem, seleciono 2 clientes diferentes nos dois jComboBox.

Ai vem o problema:

jComboBox1 (Daniel)
jComboBox2 (Ricardo)

Quando mando gravar, ele grava sempre o ultimo combobox.

Tipo, o meu banco de dados esta asism para receber isso:

IDCADASTRO
CLIENTE1
CLIENTE2

Ele cadastra o ID que é autoinc. e o cliente1 e cliente 2 fica como ricardo.
Mesmo eu colocando o cliente 1 como outro cliente sempre que eu escolher o cliente2 ele cadastra os dois com o cliente 2.

Por que isso acontece?

12 Respostas

marcelo.bellissimo

Manda o código que você criou pra salvar seus dados, pra gente dar uma olhada… certeza que você está pegando os dados do combo errado…

macdown

Putzzz…
Não seiii o que to fazendo viuuuu!!!

List clientes;

CampoCad cliente = new CampoCad(); cliente.setCliente1(clientes.get(cbcliente1.getSelectedIndex()).getIdcliente()); cliente.setCliente2(clientes.get(cbcliente2.getSelectedIndex()).getIdcliente()); ControlCad cc = new ControlCad(); cc.cadastraCad(cliente);

Segue o codigo…

Obrigado.

marcelo.bellissimo

E essa lista de Clientes que está no combo é a mesma, pros dois combos, inclusive a ordem delas?
Pois está parecendo que você está pegando acidentalmente clientes “diferentes” mas que estão no mesmo “index” do combo, e ao recuperar o Cliente pelo index da lista ‘clientes’, está te retornando o mesmo ID… ou por acaso eles tem o mesmo ID ?! É uma possibilidade… :shock:

macdown

Os combobox puxam os clientes de um mesmo banco de dados.

Então, esse é o problema! É bem provavel queue esteja pegando o index do combo iguais.
Sabe por que? É que no clientes tem 2 categoria, que no combo1 mostra tais clientes e no combo2 outros.
E ai eu pego o cliente combo 1 com index (0) e cliente combo 2 com index (0).

Os ids estão diferentes.

Como eu posso resolver isso?

marcelo.bellissimo
macdown:
Os combobox puxam os clientes de um mesmo banco de dados.

Então, esse é o problema! É bem provavel queue esteja pegando o index do combo iguais.
Sabe por que? É que no clientes tem 2 categoria, que no combo1 mostra tais clientes e no combo2 outros.
E ai eu pego o cliente combo 1 com index (0) e cliente combo 2 com index (0).

Os ids estão diferentes.

Como eu posso resolver isso?


O problema ai está claro, você está usando listas diferentes pra popular os combos, e depois usando uma unica lista pra buscar eles...
A lista que você usa pra popular os Combos está disponível? Use-as pra recuperar o valor correto pra cada indice selecionado, algo assim, eu suponho:

List<CampoCliente> clientes1;//lista q vc usa pra popular o combo1
List<CampoCliente> clientes2;//lista q vc usa pra popular o combo2

         CampoCad cliente = new CampoCad();  
         cliente.setCliente1(clientes1.get(cbcliente1.getSelectedIndex()).getIdcliente());  
         cliente.setCliente2(clientes2.get(cbcliente2.getSelectedIndex()).getIdcliente());  
         ControlCad cc = new ControlCad();  
         cc.cadastraCad(cliente);
macdown

Ele tá gerando um erro:

Exception in thread “AWT-EventQueue-0” java.lang.NullPointerException

A sua ideia foi ótima!!! Não tinha pensado nisso, mais agora ele gera o erro.

marcelo.bellissimo

macdown:
Ele tá gerando um erro:

Exception in thread “AWT-EventQueue-0” java.lang.NullPointerException

A sua ideia foi ótima!!! Não tinha pensado nisso, mais agora ele gera o erro.

Nossa… se der, coloca ai o código onde você popula seus combos, esse trecho onde você seta os clientes, e esse stackTrace completo pra gente ver o que está dando errado… ah, não esqueça de tentar fazer bater os numeros das linhas, do seu código e do post aqui, senão não dá pra saber onde ocorre o erro… (aliás, alguém sabe se existe um parâmetro pra trocar o numero da linha quando usa a tag ‘code’ ?? )

macdown

Deixa eu preparar aquiiiiii...

List<CampoReceita> receitas1;
    List<CampoReceita> receitas2;
    List<CampoReceita> receitas3;
    List<CampoReceita> receitas4;
    List<CampoReceita> receitas5;
    List<CampoReceita> receitas6;
    List<CampoReceita> receitas7;

depois fiz isso para chamar nos combos, um para cada:

private void listaArroz(){
        ControlReceita rec = new ControlReceita();
        receitas = rec.listarCategoria(0);
        cbArroz.removeAllItems();
        for (int i = 0; i < receitas.size(); i++) {
            cbArroz.addItem(receitas.get(i).getReceita());
        }
    }

depois para gravar:

private void cadastrarCardapio(){

        CampoCardapio cardapio = new CampoCardapio();
        cardapio.setData(tfData.getText());
        cardapio.setNumero(Integer.parseInt(tfNumero.getText()));
        cardapio.setTipo(String.valueOf(cbRefeicao.getSelectedItem()));
        cardapio.setCategoria(cbRefeicao.getSelectedIndex());
        cardapio.setArroz(receitas1.get(cbArroz.getSelectedIndex()).getIdreceita());
        cardapio.setFeijao(receitas2.get(cbFeijao.getSelectedIndex()).getIdreceita());
        cardapio.setSalada(receitas3.get(cbSalada.getSelectedIndex()).getIdreceita());
        cardapio.setGuarnicao(receitas4.get(cbGuarnicao.getSelectedIndex()).getIdreceita());
        cardapio.setPrincipal(receitas5.get(cbPrincipal.getSelectedIndex()).getIdreceita());
        cardapio.setBebida(receitas6.get(cbBebida.getSelectedIndex()).getIdreceita());
        cardapio.setSobremesa(receitas7.get(cbSobremesa.getSelectedIndex()).getIdreceita());
        ControlCardapio cc = new ControlCardapio();
        cc.cadastraReceita(cardapio);
        limpaCampo();

    }

O que vc tinha falado é verdade...ele esta seguinto o index.
Só que ai que vem o problemaaaaaaaa...
É um programinha para a minha esposa que é nutricionista!!!

marcelo.bellissimo

Posta essa classe: CampoReceita

Vou supor que ela tenha campos mais ou menos assim:

public class CampoReceita extends Component{
	
	private String descricao;
	private long id;

// getters e setters...

}
Voce pode tentar o seguinte:
CampoReceita campoArroz = (CampoReceita)cbArroz.getComponent(cbArroz.getSelectedIndex());
		long idArroz = campoArroz.getId();
macdown

Tá assim:

public class CampoReceita {

    private Integer idreceita;
    private String receita;
    private Integer categoria;
    private String preparo;
    private Integer receita_codigo;
    private Integer ingrediente_codigo;

Caracaaaaa...
Não entendiii muito o que fez...hehehhehhe!!
cara to acostumado programar php que é facil e JAVA nossaaaaaaa.... zerooo...

marcelo.bellissimo
Bem, então você deve ter um método getter assim:
private  Integer idreceita;  
    public Integer getIdreceita(){
        return idreceita;
    }
Se não tiver, crie... e faça isso:
private  void listaArroz(){  
         ControlReceita rec = new ControlReceita();  
         receitas = rec.listarCategoria(0);  
         cbArroz.removeAllItems();  
         for (int i = 0; i < receitas.size(); i++) {  
             cbArroz.addItem(receitas.get(i)); // adicione o objeto mesmo, CampoReceita
         }  
     }
Na classe CampoReceita, implemente o método toString(), ele que vai devolver a descrição visível no seu comboBox:
public  class CampoReceita {  
   
    private String receita;

    @Override
    public String toString() {
    	return receita;
    }

Daí pra frente, voce pode fazer do jeito que eu fiz anteriormente... ao recuperar o item do ComboBox, você pode dar um 'cast' nele e transformá-lo num objeto CampoReceita, e acessar seus valores através dos métodos que criou na classe CampoReceita...

Logo, voce pode pegar o Id diretamente pelo getId() do objeto CampoReceita que acabou de recuperar, e aí sim setar na sua lista...

macdown

Nossa,

Agora entendiiiii!!! Poxa vidaaaaaa…muito obrigadoooooooo!!!
Desculpa tomar todo esse seu tempo.

Não sei como agradecer.

Abraço.

Criado 7 de junho de 2010
Ultima resposta 7 de jun. de 2010
Respostas 12
Participantes 2