Pesquisa em Jtable

0 respostas
J

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);
    }
}
Criado 27 de fevereiro de 2013
Respostas 0
Participantes 1