Criei um combobox e adicionei dados de uma tabela. O problema é que nao nao consigo selecionar um item dentro do combobox, é como se estivesse estatico, ou sem evento no teclado para manipular os itens dentro do combobox.
Estou usando a IDE netbeans e criei um JFrame.
está aqui o codigo
Classe DAO
public List<Cadastro> getListaCombo() throws SQLException{
String sql = "select * from cadastro order by nome";
PreparedStatement stmt = this.conexao.prepareStatement(sql);
ResultSet rs = stmt.executeQuery();
List<Cadastro> minhalista = new ArrayList<Cadastro>();
while (rs.next()){
Cadastro cad = new Cadastro();
cad.setNome(rs.getString("nome"));
minhalista.add(cad);
}
rs.close();
stmt.close();
return minhalista;
}
classe JFrame
privatevoidlistaCombo()throwsSQLException{CadastroDaodao; try{dao=newCadastroDao(); List<Cadastro>minhalista=dao.getListaCombo(); CbxCadastro.removeAllItems(); CbxCadastro.setMaximumRowCount(5); CbxCadastro.addItem("<Selecione>"); for(inti=0; i < minhalista.size(); i++) { CbxCadastro.addItem(minhalista.get(i).getNome()); }}catch(SQLExceptionex){JOptionPane.showMessageDialog(null,"Erro no CbxCadastro ! "+ex); }}
Você precisa usar um Modelo e usar o Objeto diretamente no modelo.
Segue exemplo:
JComboBoxcb=newJComboBox();//Pegar uma lista de objetos (aqui Cliente, esse objeto deve estar com o metodos: equals, compareTo e hashCode)ArrayList<Cliente>lista=newClienteDAO().lista();// Criar o modelo que vai usar no componenteArrayListComboBoxModelmodeloLista=newArrayListComboBoxModel(lista);// Associar o modelo ao JComboBoxcb.setModel(modeloLista);// Criar um item qualquer o qual queira selecionar no modelo (e JComboBox)Clienteitem=newCliente();item.setNome("Nome do cliente");item.setCodigo(123);// Selecionar diretametne no modelomodeloLista.setSelectedItem(item);
Classe para criar o modelo:
importjava.util.ArrayList;importjava.util.List;importjavax.swing.AbstractListModel;importjavax.swing.MutableComboBoxModel;publicclassArrayListComboBoxModelextendsAbstractListModelimplementsMutableComboBoxModel{privateObjectselectedItem;privateListlist;publicArrayListComboBoxModel(){this.list=newArrayList();}publicArrayListComboBoxModel(Listlist){this.list=newArrayList(list);}publicvoidsetList(Listlist){this.list=list;fireContentsChanged(this,0,list.size());}@OverridepublicintgetSize(){returnlist.size();}@OverridepublicObjectgetElementAt(inti){try{returnlist.get(i);}catch(java.lang.IndexOutOfBoundsExceptionex){returnnull;}}@OverridepublicObjectgetSelectedItem(){returnselectedItem;}publicIntegergetSelectedIndex(){intindex=list.indexOf(this.getSelectedItem());returnindex;}@OverridepublicvoidsetSelectedItem(ObjectnewValue){selectedItem=newValue;fireContentsChanged(this,-1,list.size());}// MutableComboBoxModelpublicvoidsetElementAt(Objectelement,intindex){list.set(index,element);// Added at end, notify ListDataListener objectsintlength=getSize();fireIntervalAdded(this,length-1,length-1);}// MutableComboBoxModel@OverridepublicvoidaddElement(Objectelement){list.add(element);// Added at end, notify ListDataListener objectsintlength=getSize();fireIntervalAdded(this,length-1,length-1);}@OverridepublicvoidinsertElementAt(Objectelement,intindex){// Insert the element at the specified positionlist.add(index,element);// Added in middle, notify ListDataListener objectsfireIntervalAdded(this,index,index);}@OverridepublicvoidremoveElement(Objectelement){// Find out positionintindex=list.indexOf(element);if(index!=-1){// Remove an elementlist.remove(element);// Removed from middle, notify ListDataListener objectsfireIntervalRemoved(this,index,index);}}publicvoidremoveAllItens(){if(list!=null&&list.size()>0){list.clear();fireContentsChanged(this,-1,list.size());}}@OverridepublicvoidremoveElementAt(intindex){if(getSize()>=index){// Remove an element at the specified positionlist.remove(index);// Removed from index, notify ListDataListener objectsfireIntervalRemoved(this,index,index);}}}
[list]run:
Conectando ao banco ...
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at Forms.JFCadastro.listaCombo(JFCadastro.java:212)
at Forms.JFCadastro.CbxCadastroActionPerformed(JFCadastro.java:196)
at Forms.JFCadastro.access$200(JFCadastro.java:17)
at Forms.JFCadastro$3.actionPerformed(JFCadastro.java:76)
at javax.swing.JComboBox.fireActionEvent(JComboBox.java:1240)
at javax.swing.JComboBox.contentsChanged(JComboBox.java:1311)
at javax.swing.AbstractListModel.fireContentsChanged(AbstractListModel.java:100)
at javax.swing.DefaultComboBoxModel.setSelectedItem(DefaultComboBoxModel.java:88)
at javax.swing.JComboBox.actionPerformed(JComboBox.java:1294)
at Forms.JFCadastro.BtnNovoActionPerformed(JFCadastro.java:186)
at Forms.JFCadastro.access$300(JFCadastro.java:17)
at Forms.JFCadastro$4.actionPerformed(JFCadastro.java:142)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6263)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3255)
at java.awt.Component.processEvent(Component.java:6028)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4630)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
at java.awt.Container.dispatchEventImpl(Container.java:2085)
at java.awt.Window.dispatchEventImpl(Window.java:2475)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
CONSTRUÍDO COM SUCESSO (tempo total: 17 segundos)[/list]
O que será que aconteceu...
D
d34d_d3v1l
A excessão ja diz tudo…
mas me diz, para que:
CbxCadastro.setSelectedIndex(-1);
nao teria que ser “0” ?
G
gaviao
Colocando “-1” eu consigo selecionar qualquer item dentro da combo, mas dá esse erro postado acima.
Se eu colocar “0”, fica setado so no primeiro item e nao consigo selecionar outro item dentro da combo e nao dá esse erro postado acima.
Se vc puder mi ajudar eu agradeço.
D
d34d_d3v1l
java.lang.NullPointerException
diz respeito a um objeto que nao foi inicializado ou nao existe.
G
gaviao
Vc poderia me orientar melhor pelo os codigo que postei ai acima, pois eu nao consegui encontrar o erro.
Fico grato pela compeensao.
T
tony.bueno
Cara já tive um problema desse uma vez, e por mais estranho que possa parecer, e é, tenta manter o código de listar seu antigo, mas troca a chamada pro método CbxCadastro.removeAllItems(), remove item por item da JComboBox.
G
gaviao
Coloquei o metodo com o for e tentei remover item por item nao resolveu, valeu pela tentativa,