Bom dia pessoa, já fazer um tempão q venho substituído o componente jcombobox por outro devido a manipulação do mesmo, só q hoje pretendo entende e utilizar o jcombobox mas ate agora sem sucesso, alguém pode me da uma forcinha.
consigo carregar o combobox com List de objeto, mas não estou conseguindo ao selecionar uma opção pegar o id do mesmo.
private void comboDespesas() {
try {
listaPlanoConta = new PlanoContaController().listaDespesa();
comoDespesas.removeAllItems();
for (int i = 0; i < listaPlanoConta.size(); i++) {
comoDespesas.addItem(listaPlanoConta.get(i).toString());
}
} catch (SQLException ex) {
Logger.getLogger(FormProduto.class.getName()).log(Level.SEVERE, null, ex);
}
}
agora para pegar o id já tentei algumas opções e nada
PlanoConta p = (PlanoConta) comoDespesas.getSelectedItem();
System.out.println("id "+p.getId());
O problema é q tu não está inserindo o objeto, e sim uma String com o nome do componente, q tu implementou no toString() do teu objeto. Tu tem que utilizar o ComboBoxModel, para adicionar objetos dentro do JComboBox, e o ListCellRenderer, para renderizar o nome que tu quiser, no JComboBox.
Utilize esse site para referência de componentes swing.
Fernando Rosa
adsadilson
Fernando muita obrigado pela a dica, agora entendi o pq do erro, achei o comboboxModel aqui no fórum mas ao estou sabendo usar
publicclassMyComboModelextendsjavax.swing.DefaultComboBoxModel{privateArrayListlista=null;privateObjectitemSelecionado=null;/** Creates a new instance of MyComboModel */publicMyComboModel(){super();}@OverridepublicObjectgetElementAt(intindex){returngetLista().get(index);}@OverridepublicObjectgetSelectedItem(){returnitemSelecionado;}@OverridepublicintgetSize(){returngetLista().size();}@OverridepublicvoidsetSelectedItem(ObjectanItem){itemSelecionado=anItem;}publicArrayListgetLista(){if(lista==null){lista=newArrayList();}returnlista;}@OverridepublicvoidaddElement(ObjectanObject){getLista().add(anObject);}
eu ate consigo carregar o combobox com string tbm
tem como vc me da mais uma forcinha de como devo usar essa class
Fernando_Generoso_da
Bom…como tu percebeu, nessa classe tem uma lista. Essa será a lista dos teus objetos que tu quer apresentar no teu JComboBox. Inicialmente, tu pode ou fazer um método que receba a lista de objetos, para iniciar ou passa tua lista de objetos no construtor. Ai ao instanciar o teu JComboBox, tu passa esse model para ele. Tu vai ter que trabalhar também junto com o Renderer, que é a classe responsável por renderizar o nome que irá representar teu objeto. Dah uma olhada no link q eu te passei que tem tudo lá.
Fernando Rosa
adsadilson
é Fernando estou dando uma estudada nesse link q vc me passou mas, não estou vendo como devo criar mas valeu pela intenção vou continua lendo
o problema é esse combo.setRenderer(new MEURENDERER());
tenho q criar essa class tbm e implementa ela, infelizmente sou muito cru em java tenho dificuldade para criar
adsadilson
Fernando eu mudei o meu método para esse daqui
private void comboDespesas() {
comoDespesas.removeAllItems();
try {
List<PlanoConta> listaDespesas = new PlanoContaController().planoConta("D");
for (PlanoConta d : listaDespesas) {
comoDespesas.addItem(d);
}
} catch (SQLException ex) {
Msg.mensagemErroSQLException(this, "Erro ao carregar jcombobox Despesas", ex);
Logger.getLogger(FormAddOperadoraCartao.class.getName()).log(Level.SEVERE, null, ex);
}
}
ele esta listando td beleza dentro do jcombobox
e para pegar o id esse daqui
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at view.cadastro.FormAddOperadoraCartao.comoDespesasActionPerformed(FormAddOperadoraCartao.java:339)
at view.cadastro.FormAddOperadoraCartao.access$600(FormAddOperadoraCartao.java:24)
at view.cadastro.FormAddOperadoraCartao$7.actionPerformed(FormAddOperadoraCartao.java:162)
at javax.swing.JComboBox.fireActionEvent(JComboBox.java:1260)
at javax.swing.JComboBox.contentsChanged(JComboBox.java:1331)
at javax.swing.JComboBox.intervalRemoved(JComboBox.java:1351)
at javax.swing.AbstractListModel.fireIntervalRemoved(AbstractListModel.java:179)
at javax.swing.DefaultComboBoxModel.removeAllElements(DefaultComboBoxModel.java:175)
at javax.swing.JComboBox.removeAllItems(JComboBox.java:773)
at view.cadastro.FormAddOperadoraCartao.comboDespesas(FormAddOperadoraCartao.java:457)
at view.cadastro.FormAddOperadoraCartao.<init>(FormAddOperadoraCartao.java:49)
at view.cadastro.FormOperadoraCartao.btAdicionarActionPerformed(FormOperadoraCartao.java:174)
at view.cadastro.FormOperadoraCartao.access$200(FormOperadoraCartao.java:24)
at view.cadastro.FormOperadoraCartao$3.actionPerformed(FormOperadoraCartao.java:96)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6505)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
at java.awt.Component.processEvent(Component.java:6270)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4861)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4687)
adsadilson
então ele não esta preenchendo o objeto é ?
já estou quase desistindo de novo de suar jcombobox já vai para dois dias eu nessa lutar rsrsrs…
Fernando_Generoso_da
Assim…do jeito que você está fazendo, está inserindo o objeto direto no JComboBox. O correto, é tu inserir a lista no model do teu combo. e inserir o model dentro do JComboBox, como mostrei anteriormente. Assim, tu vai manipular o teu model, e não o teu combo.
Agora, se é uma lista muito grande de objetos, eu desaconselho, por experiência própria, a utilizar JComboBox. Para esse tipo de situação, eu utilizo um JTextfield, onde terá o nome do objeto selecionado, e um botão, que ao clicar, me abre uma tela com a lista de todos os objetos. Seleciono ele, e por meio de observers, pego esse objeto na tela inicial.
Sim, Seria isso. Falta apenas o Renderer. Deve estar funcionando porque pelo que vi, na classe do objeto, tu implementou o toString()…mas o correto seria tu fazer uma classe renderer, que renderizasse o nome do objeto que teria que aparecer.
Fernando
JavaDreams
adsadilson:
Bom dia pessoa, já fazer um tempão q venho substituído o componente jcombobox por outro devido a manipulação do mesmo, só q hoje pretendo entende e utilizar o jcombobox mas ate agora sem sucesso, alguém pode me da uma forcinha.
consigo carregar o combobox com List de objeto, mas não estou conseguindo ao selecionar uma opção pegar o id do mesmo.
packagecomboBox;importjava.util.ArrayList;publicclassNewJFrameextendsjavax.swing.JFrame{/** * Creates new form NewJFrame */ArrayList<String>lista=newArrayList();publicNewJFrame(){initComponents();lista.add("João");lista.add("Maria");lista.add("Carlos");for(Stringaux:lista){jComboBox1.addItem(aux);}}/** * This method is called from within the constructor to initialize the form. * WARNING: Do NOT modify this code. The content of this method is always * regenerated by the Form Editor. */@SuppressWarnings("unchecked")// <editor-fold defaultstate="collapsed" desc="Generated Code">privatevoidinitComponents(){jComboBox1=newjavax.swing.JComboBox();setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);jComboBox1.setModel(newjavax.swing.DefaultComboBoxModel(newString[]{"Item 1","Item 2","Item 3","Item 4"}));javax.swing.GroupLayoutlayout=newjavax.swing.GroupLayout(getContentPane());getContentPane().setLayout(layout);layout.setHorizontalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addGap(147,147,147).addComponent(jComboBox1,javax.swing.GroupLayout.PREFERRED_SIZE,javax.swing.GroupLayout.DEFAULT_SIZE,javax.swing.GroupLayout.PREFERRED_SIZE).addContainerGap(197,Short.MAX_VALUE)));layout.setVerticalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addGap(123,123,123).addComponent(jComboBox1,javax.swing.GroupLayout.PREFERRED_SIZE,javax.swing.GroupLayout.DEFAULT_SIZE,javax.swing.GroupLayout.PREFERRED_SIZE).addContainerGap(157,Short.MAX_VALUE)));pack();}// </editor-fold>/** * @param args the command line arguments */publicstaticvoidmain(Stringargs[]){/* Set the Nimbus look and feel *///<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html */try{for(javax.swing.UIManager.LookAndFeelInfoinfo:javax.swing.UIManager.getInstalledLookAndFeels()){if("Nimbus".equals(info.getName())){javax.swing.UIManager.setLookAndFeel(info.getClassName());break;}}}catch(ClassNotFoundExceptionex){java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE,null,ex);}catch(InstantiationExceptionex){java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE,null,ex);}catch(IllegalAccessExceptionex){java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE,null,ex);}catch(javax.swing.UnsupportedLookAndFeelExceptionex){java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE,null,ex);}//</editor-fold>/* Create and display the form */java.awt.EventQueue.invokeLater(newRunnable(){publicvoidrun(){newNewJFrame().setVisible(true);}});}// Variables declaration - do not modifyprivatejavax.swing.JComboBoxjComboBox1;// End of variables declaration}