JComboBox сделать выбор? - PullRequest
1 голос
/ 20 декабря 2011

Я ищу решение для моей проблемы.Я использую NetBeans7 и пытаюсь использовать JComboBox с setEditable (true).Мне нужно, чтобы пользователь вводил по одному слову за раз в JcomboBox, и выполнялся SELECT LIKE, и возвращался один список со всеми результатами, найденными для JCombo.

Я видел это: Установить размер JComboBoxPopupMenu

Но я не могу реализовать.

вот как я пытаюсь.

//the model
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() {  
        return selectedItem;  
    }  

}  


//here JComboBox 
comboPesquisa.setMaximumRowCount(10);
    final JTextField tf;    
    tf = (JTextField)comboPesquisa.getEditor().getEditorComponent();
    tf.setDocument(new LimitaNroCaracteres(50));
    tf.addKeyListener(new KeyAdapter() {
        public void keyReleased(KeyEvent e){ 
            comboPesquisa.removeAllItems();
            List<Funcoes> lista = new FuncoesDAO().retornaFuncao(tf.getText());    
            for(Funcoes f : lista){
                comboPesquisa.addItem(f.getFuncao());
            }
            comboPesquisa.setPopupVisible(true);
        }      
    });

//here my DAO that return all results
public List<Funcoes> retornaFuncao(String funcao){
         List<Funcoes> lista = new ArrayList<Funcoes>();
         PreparedStatement stm = null;
         ResultSet rs = null;
         try{
             stm = this.con.prepareStatement("SELECT * FROM funcoes WHERE funcao LIKE ?");
             stm.setString(1, "%" + funcao + "%");
             rs = stm.executeQuery();
             while(rs.next()){
                 Funcoes f = new Funcoes();
                 f.setIdFuncao(rs.getLong("id_funcao"));
                 f.setFuncao(rs.getString("funcao"));
                 lista.add(f);
             }             
         }catch (SQLException e){
             JOptionPane.showMessageDialog(null, "Erro tentando consultar função", "Erro", JOptionPane.ERROR_MESSAGE);
         }finally{
            try {
                rs.close();
                stm.close(); 
            } catch (SQLException ex) {
                Logger.getLogger(FuncoesDAO.class.getName()).log(Level.SEVERE, null, ex);
            }

         }
         return lista;
     }

Как заставить это работать?

спасибо

1 Ответ

3 голосов
/ 20 декабря 2011

То, что вы ищете, обычно называется «автозаполнение». Вот реализация одного:

Автозаполнение JComboBox

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...