JComboBox para consulta?

3 respostas
fernandopaiva

Salve galera…

Seguinte, eu tenho um JComboBox que uso pra consulta, vou digitando ele vai me trazendo o resultado de um List.
Eu quero exibir todos os resultados q ele encontrar, selecionar o que eu preciso e adicionar o valor a um JTextField.

to tentando assim, mas ainda sem sucesso.

public void editorCombo(){
    comboPesquisa.getEditor().getEditorComponent().addKeyListener(new KeyAdapter() {
        public void keyReleased(KeyEvent e){            
            List<Funcoes> lista = new FuncoesDAO().retornaFuncao(String.valueOf(e.getKeyChar()).toUpperCase());  
            comboPesquisa.setModel(new DefaultComboBoxModel(new Vector<Funcoes>(lista)));
            comboPesquisa.setPopupVisible(true);
        }
    });
   
    //for(Funcoes f : lista){
       // idFuncao.setText(new FormataCodigos().retornaCodigoFormatado(f.getIdFuncao()));
      //  funcao.setText(f.getFuncao());
    //}
}

Na maneira como estou fazendo ele me traz apenas os enderecos da lista algo como: beans.Funcoes@6cb8 e nao os itens…com for each consigo pegar os itens, mas nao consigo fazer o popup funcionar…entao to num mato sem cachorro…kk !!!

Eu preciso pegar o item selecionado e adicionar seu codigo e seu nome a 2 jtextfields…Como fazer isso ?

obrigado.

3 Respostas

fernandopaiva

blz galera…estou tentando isso agora, vejam

//modelo de jcombo
public class JComboModelFuncoes extends AbstractListModel implements ComboBoxModel{
    private Object selectedItem;
    private List<Funcoes> listaFuncoes = null;
    
    public JComboModelFuncoes(List<Funcoes> lista){
        listaFuncoes = new ArrayList<Funcoes>();
        listaFuncoes.addAll(lista);
    }
   
    @Override
    public int getSize() {        
        return listaFuncoes.size();
    }

    @Override
    public Object getElementAt(int index) {
        return listaFuncoes.get(index);
    }

    @Override
    public void setSelectedItem(Object anItem) {
        selectedItem = anItem;
    }

    @Override
    public Object getSelectedItem() {
        //throw new UnsupportedOperationException("Not supported yet.");
        return selectedItem;
    }
 
}



//no meu JFrame
public void editorCombo(){
    comboPesquisa.setMaximumRowCount(10);
    JTextComponent t = null;    
    t = (JTextComponent)comboPesquisa.getEditor().getEditorComponent(); 
    t.setDocument(new LimitaNroCaracteres(50));
    t.addKeyListener(new KeyListener() {
            @Override
            public void keyTyped(KeyEvent e) {
                e.getKeyChar();
            }

            @Override
            public void keyPressed(KeyEvent e) {
                if(e.getKeyCode() == KeyEvent.VK_ENTER){
                    
                }
            }

            @Override
            public void keyReleased(KeyEvent e) {
                //throw new UnsupportedOperationException("Not supported yet.");    
                List<Funcoes> lista = new FuncoesDAO().retornaFuncao(String.valueOf(e.getKeyChar()).toUpperCase());  
                JComboModelFuncoes mf = new JComboModelFuncoes(lista);
                comboPesquisa.setModel(mf);    
                comboPesquisa.setPopupVisible(true);
            }
        });
    
}

Ainda não consegui fazer funcionar…Qquer dica eh sempre bem vinda.

obrigado

fernandopaiva

Opa galera…

Ainda naum consegui resolver o problema. Estou tentando ir digitando no JComboBox e ir retornando os valores encontrados no SELECT com LIKE.

Como fazer isso ?

obrigado.

S

fernandopaiva:
Salve galera…

Seguinte, eu tenho um JComboBox que uso pra consulta, vou digitando ele vai me trazendo o resultado de um List.
Eu quero exibir todos os resultados q ele encontrar, selecionar o que eu preciso e adicionar o valor a um JTextField.

to tentando assim, mas ainda sem sucesso.

public void editorCombo(){
    comboPesquisa.getEditor().getEditorComponent().addKeyListener(new KeyAdapter() {
        public void keyReleased(KeyEvent e){            
            List<Funcoes> lista = new FuncoesDAO().retornaFuncao(String.valueOf(e.getKeyChar()).toUpperCase());  
            comboPesquisa.setModel(new DefaultComboBoxModel(new Vector<Funcoes>(lista)));
            comboPesquisa.setPopupVisible(true);
        }
    });
   
    //for(Funcoes f : lista){
       // idFuncao.setText(new FormataCodigos().retornaCodigoFormatado(f.getIdFuncao()));
      //  funcao.setText(f.getFuncao());
    //}
}

Na maneira como estou fazendo ele me traz apenas os enderecos da lista algo como: beans.Funcoes@6cb8 e nao os itens…com for each consigo pegar os itens, mas nao consigo fazer o popup funcionar…entao to num mato sem cachorro…kk !!!

Eu preciso pegar o item selecionado e adicionar seu codigo e seu nome a 2 jtextfields…Como fazer isso ?

obrigado.

Fala rapaz, beleza pura?

Você consegue alimentar o combo correto, mas o texto dos itens estão como: beans.Funcoes@6cb8 é isso?
Isso acontece porque provavelmente você não está usando o toString() da sua classe Funcoes.

O JCombobox trabalha diretamente com objetos, e um jeito de referenciar melhor o texto de cada item dele é sobrescrevendo o metodo toString() da classe Object (a qual Funcoes herda automaticamente e por padrao mostra o endereço na memória).

basta você deixar na sua classe algo como:

@Override
public String toString(){
    return "Descricao de cada funcao aqui";
}

Creio que isso resolva quanto a exibição no combo.

Agora a hora de atribuir essa descrição na JTextField é algo como:

minhaCaixaDeTexto.setText((String) minhaCombo.getSelectedItem()); // Aqui usamos o cast do metodo toString() da classe Funcoes

Fiz meio rapidao aqui cara, mas da uma pesquisada no toString() que isso salva a vida de muita gente, inclusive salvou a minha várias vezes.

Abraço.

Criado 17 de dezembro de 2011
Ultima resposta 28 de dez. de 2011
Respostas 3
Participantes 2