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);
}
}