[RESOLVIDO]Pegar dados da Jtable e Jogar num JcomboBox do tipo Object
27 respostas
jtable
M
Matheus_Filho
Tenho uma tela para cadastrar Pedidos, nessa tela uma JcomboBox com Objetos clientes vindo do banco(só estou mostrando o nome dos clientes nessa JcomboBox). Quando cadastro um novo pedido, os dados vão para uma Jtable, porem quero selecionar a linha da Jtable e trazer o nome do cliente para minha JcomboBox, já tentei utilizar o cmb.SetSelectedItem(); porem não aceita dados do tipo Objeto ;/
(Veja na foto, a linha selecionada esta com todos os dados no seus respectivos lugares, menos a ComboBox Cliente)
Stringresult=""+tabela.getValueAt(tabela.getSelectedRow(),1);combo.removeAllItems(); //Remove os itens antigos e deixa o combo sempre com um item, se você quiser um histórico de nomes, pode remover essa linhacombo.addItem(result); //adiciona o item da tabela, nesse caso pega a linha selecionada (getSelectedRow), e a coluna 1. Lembrando que a coluna começa do 0;combo.setSelectedItem(result); //Deixa o item que veio da tabela já selecionado no combo
M
Matheus_Filho
//função para popular combobox pegando info do banco de dadospublicvoidpopularCmb(){ClienteDAOcdao=newClienteDAO();DefaultComboBoxModelcomboMobel=(DefaultComboBoxModel)cmb_cliente.getModel();for(Clientec:cdao.find()){comboMobel.addElement(c);}}
M
Matheus_Filho
txt_ID.setText(jTable6.getValueAt(jTable6.getSelectedRow(),0).toString());txt_vale.setText(jTable6.getValueAt(jTable6.getSelectedRow(),1).toString());txt_nfe.setText(jTable6.getValueAt(jTable6.getSelectedRow(),2).toString());cmb_situacao.setSelectedItem(jTable6.getValueAt(jTable6.getSelectedRow(),3).toString());cmb_cliente.setSelectedItem(jTable6.getValueAt(jTable6.getSelectedRow(),4));// ESSA LINHA NAO FUNCIONAtxt_peso.setText(jTable6.getValueAt(jTable6.getSelectedRow(),5).toString());txt_valor.setText(jTable6.getValueAt(jTable6.getSelectedRow(),6).toString());
Aqui é o codigo de quando eu seleciono a linha na Jtable e os dados vão para os JtextField(FUNCIONAM!) e a ComboBox cliente(NAO FUNCIONA)
rodriguesabner
Não precisa usar esse popularCmb, faz assim:
Stringresult=""+jTable6.getSelectedRow(),4)cmb_cliente.removeAllItems();//Remove os itens antigos e deixa o combo sempre com um item, se você quiser um histórico de nomes, pode remover essa linhacmb_cliente.addItem(result);//adiciona o item da tabela, nesse caso pega a linha selecionada (getSelectedRow), e a coluna 1. Lembrando que a coluna começa do 0;cmb_cliente.setSelectedItem(result);//Deixa o item que veio da tabela já selecionado no combo
M
Matheus_Filho
Preciso sim, pois essa é a tela de cadastrar/editar/excluir clientes, se eu fizer desse jeito que vc me passou, todos os outros nomes de clientes vao sumir e só vai sobrar o qual eu cliquei
rodriguesabner
combo.removeAllItems(); //Remove os itens antigos e deixa o combo sempre com um item, se você quiser um histórico de nomes, pode remover essa linha
Os cliente já estão no combo?
M
Matheus_Filho
sim, pois ao iniciar o programa eu invoco o metodo de popularCmb (popula o comboBox com os objetos clientes)
Ao clicar na linha, todos os meu dados vão para os determinados lugares, menos o cmb_cliente que é do tipo objeto, ele nao aceita SetSelectedItem(jTable6.getValueAt(jTable6.getSelectedRow(), 4)
rodriguesabner
Stringresult=""+jTable6.getSelectedRow(),4)//Pega a linha selecionada da coluna 4cmb_cliente.setSelectedItem(result);//Deixa o item que veio da tabela já selecionado no combo
M
Matheus_Filho
nao funcionou pq a cmb_cliente é do Tipo Object
rodriguesabner
Mas mano, eu acabei de fazer isso aqui e deu certo. A ComboBox aceita String dentro dela tranquilo…
M
Matheus_Filho
eu sei, no caso a outra combobox que tenho (cmb_situação) pega os valores da tabela, pq é tipo String mas essa cmb_cliente é tipo Object enão pega valores da jtable
Até muda os nomes, porem quando clico em lançar/atualizar da este erro: Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.String cannot be cast to model.bean.Cliente
Pois cliente é uma FK na tabela pedido
Jonathan_Medeiros
Recupera os dados da JTable da forma que você já fazia, após recuperar cria um novo objeto do tipo que sua combo possuí, feito isso basta setar o objeto na combo que deve funcionar.
Exemplo: (Imagino que sua combo já esteja preenchida)
Tenta só com: combo.getSelectedItem();, até pq fazendo: Object result.... Vc não tá referenciando nada do model Cliente
Jonathan_Medeiros1 like
Cara, é bem simples!
Pensa comigo, assim como na JTable a JComboBox também trabalha com Model certo?
Então para manipular os objetos precisamos informar ao model utilizado qual objeto dele queremos.
Ficaria assim:
Stringid=suaJTable.getValueAt(suaJTable.getSelectedRow(),0).toString();Stringnome=suaJTable.getValueAt(suaJTable.getSelectedRow(),1).toString();SeuObjetoobj=newSeuObjeto(id,nome);suaCombo.getModel().setSelectedItem(obj);//Recupera o model e depois passa o objeto
rodriguesabner
Então mano, é praticamente a mesma coisa, a única coisa diferente é que na hora de puxar os dados ele não chamou o Model, só na hora de referenciar, por isso o erro…
Jonathan_Medeiros
Justamente, muito bem destacado @rodriguesabner, o preenchimento dos objetos na comboBox devem referenciar o model da mesma também.
M
Matheus_Filho
Para puxar o nome funciona perfeitamente, obrigado, porem quando Clico em Atualizar/Lançar tenho este erro:
O próprio erro descreve o problema, você está quebrando a integridade de uma FK da sua tabela no banco de dados!
Veja bem, o erro descreve até qual é a FK e qual é a coluna que está ocorrendo a quebra.
Verifique se os dados que você está enviando para atualizar/lançar estão corretos ou se sua FK deveria ser exatamente assim, pois algum dos dois devem estar incorretos.
M
Matheus_Filho
Consegui mano, só tive que mostrar uma coluna ID_cliente na minha Jtable