Pessoal, estou tentando criar um combobox em um Jtable (parecido com um lookupcombobox),
porém estou tenho trabalho.
Criei o CellEditor,CellRenderer, só o problema está quando quero exibir um texto no combobox e salvar um objeto (setValueAt) no tablemodel.
Pois na hora do setValueAt , ele tenta setar a string no tablemodel, sendo que na verdade quero dar um set no objeto.
O set eu estou dando em uma lista utilizada para popular o JTable, utilizando tablemodel
//table model
public class TableModelCalculo extends AbstractTableModel {
privateList<Object>lista;privateDecimalFormatdf;//pega a lista e popula a tabela.. isso é que é legal do table model@OverridepublicObjectgetValueAt(introwIndex,intcolumnIndex){Objectobjeto=getLista().get(rowIndex);if(objeto!=null){Object[]obj=newObject[6];//castobj[0]=((CorrugadoEscolhido)).getCorrugado;//aqui é o objeto e tambem o comboobj[1]=((CorrugadoEscolhido)).getQuantidade;returnobj[columnIndex];}returnnull;}@OverridepublicClass<?>getColumnClass(intcolumnIndex){if(columIndex==0){returnCorrugados.class;}returnBigDecimal.class;}publicvoidsetValueAt(Objectvalue,introw,intcol){Objectobjeto=getLista().get(row);switch(col){case0://Name((CorrugadoEscolhido)objeto).setCorrugado((Corrugado)value);//aqui dou um set no corrugado para gravar na lista de corrugados escolhidos, nesse momento ele pega do combobox, mas entao pega a string e dispara uma exceção, pois esperava um objeto do tipo corrugadobreak;case1://value((CorrugadoEscolhido)objeto).setQuantidade(newBigDecimal(value.toString()));break;}//diz para o listenar que a tabela teve alteraçõesfireTableCellUpdated(row,col);}
DeGuedes
Cara eu faço diferente, eu crio uma classe com extends AbstractCellEditor implements TableCellEditor…
cara eu axo q o problema esta na sua classe do combo… ela deve estar retornando uma String ao inves do objeto…
R
rodjle
Tens um exemplo?
Desde já valeu pelo interesse.
DeGuedes
publicclassComboProdextendsAbstractCellEditorimplementsTableCellEditor{privateJComboBoxfield;privateProdutos[]values={};privateList<Produtos>lpro=newArrayList<Produtos>();privateProdutosJpaControllerprojpa=newProdutosJpaController();@OverridepublicComponentgetTableCellEditorComponent(JTabletable,Objectvalue,booleanisSelected,introw,intcolumn){lpro=projpa.findProdutosEntities();field=newJComboBox(values);field.addItem("");for(inti=0;i<lpro.size();i++){field.addItem(lpro.get(i));}field.setSelectedItem(value);//Deixa o editor pré-selecionado com o valor da célulareturnfield;}@OverridepublicObjectgetCellEditorValue(){returnfield.getSelectedItem();}}
e na minha classe eu faço assim:
jTableProd.setDefaultEditor(Produtos.class, new ComboProd());
[]'s
R
rodjle
Mais uma duvida,
vejo que vc adicionou no combo objetos do tipo PRODUTO, a minha duvida é o que vc mostra efetivamente quando o usuario clica no combo??
Mostra a descrição do produto??. Se for isso em qual momento vc faz, no Renderer do JTable??
DeGuedes
O que aparece é o nome dele… na classe Produtos tem essa parte aqui:
@OverridepublicStringtoString(){returnnome;}
OBs: Uso Hibernate na criação dessa classe…
R
rodjle
Entendo, uso tambem o hibernate. Mas não tenho esse metodo toString, talvez seja isso que esteja faltando, pois o combo deve chamar IMPLICITAMENTE,
o metodo toString, ou vc chama em algum outro lugar??
DeGuedes
Implicitamente… esse metodo é Override… automaticamente quando eu seto esse objeto em algum combo, por exemplo, ele me retorna o nome dele… e quando eu faço o setValueAt, ele retorna o objeto certinho… ;D
[]'s
DeGuedes
rodjle:
Entendo, uso tambem o hibernate. Mas não tenho esse metodo toString, talvez seja isso que esteja faltando, pois o combo deve chamar IMPLICITAMENTE,
o metodo toString, ou vc chama em algum outro lugar??
Tens certeza q nao tem isso na sua classe do Hibernate??