Pesquisa em Jtable

Olá galera, ow eu dinovo aqui.
Preciso de uma sugestão para desenvolver uma busca dentro de JTable.
Tenho um JTable preenchida com valores que se repetem dentro dela.
A função da pesquisa é localizar esse valores e selecionar as células.
Eu fiz uns teste, mas o resultado da JTable fica todo estranho, só aparece as células com o resultado da minha pesquisa,
dai preciso dar alguns cliques para visualizar o restante dos valores, mas enfim segue abaixo oq eu tentei fazer:

public void buscar(JTable tabela, String texto) { AbstractTableModel modelo = (AbstractTableModel) tabela.getModel(); int colunas = modelo.getColumnCount(); int linhas = modelo.getRowCount(); int total = 0; int li = 0; RenderTable renderer = new RenderTable(); tabela.setDefaultRenderer(Object.class, renderer); for (int i = 0; i < linhas; i++) { for (int ii = 0; ii < colunas; ii++) { String valor = (String) tabela.getValueAt(i, ii); if (valor.equals(texto)) { renderer.colorirCelula(i, ii, Color.red); total = total + 1; } } li = i; } JOptionPane.showMessageDialog(null, "Total de ocorrencias: " + total); tabela.getSelectionModel().setSelectionInterval(0, li); }

import java.awt.Color;
import java.awt.Color;
import java.awt.Component;
import java.awt.Point;
import java.util.HashMap;
import java.util.Map;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author Jaime
 */
    public class RenderTable extends DefaultTableCellRenderer {

    private Map _cores = new HashMap();
    private Point _tempCel = new Point(0, 0);
    private Color _defaultBG;

    public RenderTable() {
        this._defaultBG = getBackground();
    }

    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
            boolean hasFocus, int row, int column) {

        Component c = super.getTableCellRendererComponent(
                table,
                value,
                isSelected,
                hasFocus,
                row,
                column);

        this._tempCel.x = row;
        this._tempCel.y = column;
        if (this._cores.containsKey(this._tempCel)) {
            c.setBackground((Color) this._cores.get(this._tempCel));
        } else {
            c.setBackground(this._defaultBG);
        }

        return c;
    }

    public void colorirCelula(int row, int col, Color cor) {
        this._cores.put(new Point(row, col), cor);
    }
}