Dificuldade em manipular jcombobox

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.

Dah uma olhada nesse link:

http://docs.oracle.com/javase/tutorial/uiswing/components/combobox.html

Utilize esse site para referência de componentes swing.

Fernando Rosa

Fernando muita obrigado pela a dica, agora entendi o pq do erro, achei o comboboxModel aqui no fórum mas ao estou sabendo usar

[code]
public class MyComboModel extends javax.swing.DefaultComboBoxModel {

private ArrayList lista = null;  
private Object itemSelecionado = null;  
  
/** Creates a new instance of MyComboModel */  
public MyComboModel() {  
    super();  
}  
  
@Override
public Object getElementAt(int index) {  
    return getLista().get(index);  
}  

      
@Override
public Object getSelectedItem() {  
    return itemSelecionado;  
}  
  
@Override
public int getSize() {  
    return getLista().size();  
}  

  
@Override
public void setSelectedItem(Object anItem) {  
    itemSelecionado = anItem;  
}  
  
public ArrayList getLista(){  
    if( lista == null ){  
        lista = new ArrayList();  
    }  
    return lista;  
}  


  
@Override
public void addElement(Object anObject){  
    getLista().add(anObject);  
}  [/code]

eu ate consigo carregar o combobox com string tbm
tem como vc me da mais uma forcinha de como devo usar essa class

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

é 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

algo assim:

MyComboModel model = new MyComboModel(MinhaLista);
JComboBox combo = new JComboBox(model);
combo.setRenderer(new MEURENDERER());

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

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

private void comoDespesasActionPerformed(java.awt.event.ActionEvent evt) { PlanoConta c = (PlanoConta) comoDespesas.getSelectedItem(); System.out.println(""+c.getId()); }

mas estando dando outro erro agora

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)

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…

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.

Fernando Rosa

Seria isso daqui Fernando ou não

private void comboDespesas() { try { comoDespesas.removeAllItems(); List<PlanoConta> listaDespesas = new PlanoContaController().planoConta("D"); this.model = new MyComboModel(listaDespesas); comoDespesas.setModel(model); } catch (SQLException ex) { Msg.mensagemErroSQLException(this, "Erro ao carregar jcombobox Despesas", ex); Logger.getLogger(FormAddOperadoraCartao.class.getName()).log(Level.SEVERE, null, ex); } }

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

[quote=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.

[code]
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);
}

}[/code]  

agora para pegar o id já tentei algumas opções e nada

PlanoConta p = (PlanoConta) comoDespesas.getSelectedItem(); System.out.println("id "+p.getId());
[/quote]

Olá adsadilson,

Fiz uma solução simples aqui que talvez lhe ajude.
Segue o link abaixo:

Dica: é bom olhar o vídeo também: http://www.youtube.com/watch?v=zt9ZfQLnGb8

Abraço.

package comboBox;

import java.util.ArrayList;

public class NewJFrame extends javax.swing.JFrame {

    /**
     * Creates new form NewJFrame
     */
    ArrayList<String> lista = new ArrayList();
    
    public NewJFrame() {
        initComponents();
        lista.add("João");
        lista.add("Maria");
        lista.add("Carlos");
        
        for(String aux : 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">
    private void initComponents() {

        jComboBox1 = new javax.swing.JComboBox();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jComboBox1.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));

        javax.swing.GroupLayout layout = new javax.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
     */
    public static void main(String args[]) {
        /* 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.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            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(new Runnable() {
            public void run() {
                new NewJFrame().setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify
    private javax.swing.JComboBox jComboBox1;
    // End of variables declaration
}