Вы можете установить списки массивов для каждого столбца, которые заполняются значениями, отфильтрованными для, и реализовать их в пользовательском рендерере. Если значения строки в ячейке не соблюдаются, средство визуализации рекурсивно вызывает себя со строкой + 1.
если строка ячеек соответствует критериям, она отображается, другой массив хранит номера уже отрисованных строк, лучше всего это объяснить на примере этого метода в клиентском рендерере расширяет JLabel
public Component getTableCellRendererComponent(JTable table, Object color,
boolean isSelected, boolean hasFocus, int row, int column) {
Object value;
String s;
try {
if (row == 0) {
drawn[column].clear();
}// drawn is arraylist which stores cols rend
if (row > table.getModel().getDataVector.size()) {
return null;
}// if we go too far
if (drawn[column].contains(Integer.toString(row)) == true) {
// already rendered?
return getTableCellRendererComponent(table, color, isSelected,
hasFocus, (row + 1), column);
}// render row+1
for (int i = 0; i < filters.length; i++) {
value = table.getModel().getValueAt(row, i);
s = (i == 1) ? df.format(value) : value.toString();
if (filters[i].contains(s) != true) {
//try and put in next row, if succeeds when it reaches column 8 it adds row to
return getTableCellRendererComponent(table, color,
isSelected, hasFocus, (row + 1), column);
}
}
value = table.getModel().getValueAt(row, column);
setFont(getFont().deriveFont(Font.BOLD));
if ((isSelected == false)) {
if ((column == 1)) {
setForeground(Color.magenta);
}// just formatting
else {
setForeground(Color.black);
setBackground(Color.white);
}
} else {
setBackground(Color.blue);
setForeground(Color.white);
}
if ((column == 1))// col 1 is a date, other columns strings
{
setText((value == null) ? "" : df.format(value));
} else {
setText((value == null) ? "" : value.toString());
}
todayStr = df.format(new java.util.Date());
dateval = table.getModel().getValueAt(row, 1);
String datevalStr = df.format(dateval);
if (datevalStr.equals(todayStr)) {
setForeground(Color.red);
}
drawn[column].add(Integer.toString(row));// mark row as rendered
} catch (Exception e) {
e.getMessage();
return null;
}
return this;
}