Optimizar busqueda con DocumentListener

Ay algo que no me sale bien, aqui les muestro la imagen: https://www.dropbox.com/s/8yh1dc4x3w6a3ez/DudaFilterRowTable.PNG
Como veran cuando presiono la letra "A" me muestra "A1" y "CA", algun consejo para que solo me muestren todas las palabras que comienzen con "A".
Aqui les va mi codigo:

public CodAlmacenTopComponent() {
        initComponents();
        setName(Bundle.CTL_CodAlmacenTopComponent());
        setToolTipText(Bundle.HINT_CodAlmacenTopComponent());
        //-------------------------------------------
        //Create a table with a sorter
        sorter = new TableRowSorter<AlmacenTableModel>(model);
       
        tblAlmacen.setRowSorter(sorter);
       
        //Para este ejemplo,lo mejor es tener una sola seleccion
        tblAlmacen.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        //Cuando se cambia la selección, proporcionará al usuario un número
        //de fila para visualizar y modelo.
        tblAlmacen.getSelectionModel().addListSelectionListener(
                new ListSelectionListener() {
                public void valueChanged(ListSelectionEvent event){
                    int viewRow = tblAlmacen.getSelectedRow();
                    if(viewRow < 0){
                        //Selección consiguió filtrado de distancia.
                        txtStatus.setText("");
                    } else {
                        int modelRow =
                                tblAlmacen.convertRowIndexToModel(viewRow);
                        txtStatus.setText(String.format("Selected Row in view: %d. " +
                                    "Selected Row in model: %d.",
                                    viewRow, modelRow));
                    }
                    }
                }
        );
        //Cada vez que cambia filterText, invocar NewFilter
        txtBusqueda.getDocument().addDocumentListener(
                new DocumentListener() {

                @Override
                public void insertUpdate(DocumentEvent e) {
                    newFilter();
                }

                @Override
                public void removeUpdate(DocumentEvent e) {
                    newFilter();
                }

                @Override
                public void changedUpdate(DocumentEvent e) {
                    newFilter();
                }
                   
            }
        );
       
        //-------------------------------------------
             
       
        tblAlmacen.setModel(model);
        tblAlmacen.addKeyListener(new KeyAdapter() {
       
            @Override
            public void keyPressed(KeyEvent event){
                if(event.getKeyCode() == KeyEvent.VK_ENTER){
                    verAlamacenActionPerformed(null);
                   
                }
                if(event.getKeyCode()==KeyEvent.VK_F2){
                    btnIngresarActionPerformed(null);
                }
                if(event.getKeyCode()==KeyEvent.VK_F3){
                    btnModificarActionPerformed(null);
                }
               
            }
        });
       
               
//        txtBusqueda.addCaretListener(new javax.swing.event.CaretListener() {
//            @Override
//            public void caretUpdate(CaretEvent evt){
//                validarExistencia(txtBusqueda.getText());
//            }        
//        });
       
       
       
    }
    private void newFilter(){
        RowFilter<AlmacenTableModel, Object> rf = null;
        //Si la expresión actual no analiza, no se actualizan.
        try {
            rf = RowFilter.regexFilter(txtBusqueda.getText(), 0);
        } catch (java.util.regex.PatternSyntaxException e) {
            return;
        }
        sorter.setRowFilter(rf);
    }