Pesquisa depois de um Backspace

0 respostas
C

Malta reparem no seguinte código:

Tenho em uma classe:

private void jTextFieldNomeKeyTyped(java.awt.event.KeyEvent evt) {                                        

        if(evt.getKeyChar() != KeyEvent.VK_BACK_SPACE )
        {
            String TextojTextFieldNome = jTextFieldNome.getText() + evt.getKeyChar();

            try
            {
                dal.carregaDadosJList(TextojTextFieldNome, jList1);
            }
            catch (SQLException ex)
            {
                Logger.getLogger(EcraInicial.class.getName()).log(Level.SEVERE, null, ex);
            }
            dal.apresentaAutoComplete(jList1, jScrollPane, TextojTextFieldNome);
        }
    }                                       

    private void jTextFieldNomeKeyPressed(java.awt.event.KeyEvent evt) {                                          
        // TODO add your handling code here:

        if(evt.getKeyCode() == KeyEvent.VK_BACK_SPACE )
        {
            if(evt.getKeyCode() == 10)
            {
                dal.ListaLinhaSeleccionada(jList1, jTextFieldNome);
            }

            String a = jTextFieldNome.getText();
            String TextojTextFieldNomeSemUltimaString = a.substring(0, a.length() - 1);
            
            try
            {
                dal.carregaDadosJList(TextojTextFieldNomeSemUltimaString, jList1);
            }
            catch (SQLException ex)
            {
                Logger.getLogger(EcraInicial.class.getName()).log(Level.SEVERE, null, ex);
            }
            dal.apresentaAutoComplete(jList1, jScrollPane, TextojTextFieldNomeSemUltimaString);
        }

E em outra:

public void carregaDadosJList(String like, JList jList) throws SQLException //tem de estar na mesma classe da ComboBox
    {
        jList.removeAll();
        DefaultListModel lista = new DefaultListModel();

        String str1 = "Select COD_ENTIDADE, NOME_ENTIDADE, VALOR_DESCONTO from ENTIDADE_DESCONTO where NOME_ENTIDADE like '"+like+"%'";
        PreparedStatement stmt = this.conexao.prepareStatement(str1);
        ResultSet rs = stmt.executeQuery();

        while (rs.next())
        {
            Entidade_Desconto_Logica EDL = new Entidade_Desconto_Logica();

            lista.addElement(rs.getString("NOME_ENTIDADE"));
            EDL.setNOME_ENTIDADE(rs.getString("COD_ENTIDADE"));
            EDL.setNOME_ENTIDADE(rs.getString("NOME_ENTIDADE"));
            EDL.setVALOR_DESCONTO(Long.valueOf(rs.getString("VALOR_DESCONTO")));
        }

        jList.setModel(lista);
        numeroLinhasDaLista = lista.size();
    }

    public void apresentaAutoComplete(JList jList1,JScrollPane jScrollPane1, String textoJTextField)
    {
        System.out.println("1");
        System.out.println("numeroLinhasDaLista "+numeroLinhasDaLista);

        jList1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        jList1.setSelectedIndex(0);

        if(numeroLinhasDaLista <= 10)
        {
            jList1.setVisibleRowCount(numeroLinhasDaLista);
        }
        else
        {
            jList1.setVisibleRowCount(10);
        }

        if (numeroLinhasDaLista > 0)
        {
            jScrollPane1.setVisible(true);
        }

        else
        {
            jScrollPane1.setVisible(false);
        }

        System.out.println(textoJTextField);

        if(textoJTextField.equals(""))
        {
            jScrollPane1.setVisible(false);
        }
        System.out.println("2");
    }

O que isto faz é ir a base de dados fazer a pesquisa e retornar a informação numa jlist que esta dentro de um jPainel, isto sempre k uma letra é inserida num jTextField.
Agora é o seguinte, ao inserir uma letra a pesquisa funciona perfeitamente e a listagem dos dados também, o problema é quando um letra é removida, a pesquisa continua a ser bem feita, pois eu comprovo isso basta ver o “numeroLinhasDaLista = lista.size();”, que retorna sempre o valor certo, o problema aqui é que o número de linhas da jlist não está correto, não são mostradas todas as linhas apesar da informação estar na jList.

Exemplo pesquiso a string BB e ele retorna o campo da tabela desejado começado po “BB”, e retorna 7 linhas na JList e lista as 7, depois retiro um B fazendo um Backspace e ele faz a pesquisa da string “B” e retorna 9 linhas mas apenas 7 são mostradas…

Criado 29 de dezembro de 2010
Respostas 0
Participantes 1