Se não está deveria, não sobrescrevi o TabelModel padrão do jTable.
Para facilitar vou postar todo o código. hehehe
Só não reparem na POG 
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package minhalib;
import java.awt.Color;
import java.awt.Component;
import java.awt.Toolkit;
import java.awt.datatransfer.StringSelection;
import java.util.ArrayList;
import java.util.regex.PatternSyntaxException;
import javax.swing.JComponent;
import javax.swing.JTable;
import javax.swing.RowFilter;
import javax.swing.table.*;
/**
*
* @author Augusto Wolf
*/
public class MinhaTabela extends JTable {
ArrayList<ArrayList<Color>> corFundo = new ArrayList<>();
Color padraoFundo = Color.WHITE;
ArrayList<ArrayList<Color>> corFonte = new ArrayList<>();
Color padraoFonte = Color.BLACK;
ArrayList<ArrayList<Color>> corFundoSelec = new ArrayList<>();
Color padraoFundoSelec = new Color(60, 120, 250);
ArrayList<ArrayList<Color>> corFonteSelec = new ArrayList<>();
Color padraoFonteSelec = Color.BLACK;
ArrayList<Class> types = new ArrayList<>();
boolean padraoEdit = true;
ArrayList<ArrayList<Boolean>> canEdit = new ArrayList<>();
DefaultTableCellRenderer meuRender = new DefaultTableCellRenderer() {
@Override
public Component getTableCellRendererComponent(
JTable table, Object value, boolean isSelected, boolean hasFocus, int r, int c) {
super.getTableCellRendererComponent(table, value, isSelected, hasFocus, r, c);
if (r == 0) {
System.out.println(r + " " + c + " ");
}
try {
setBackground(corFundo.get(r).get(c));
setForeground(corFonte.get(r).get(c));
// setSelectionBackground(corFundoSelec.get(r).get(c));
// setSelectionForeground(corFonteSelec.get(r).get(c));
} catch (Exception ex) {
ex.printStackTrace();
setBackground(padraoFundo);
setForeground(padraoFonte);
// setSelectionBackground(padraoFundoSelec);
// setSelectionForeground(padraoFonteSelec);
}
return this;
}
};
public MinhaTabela() {
super();
setDefaultRenderer(Object.class, meuRender);
addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
tabMouseClicked(evt);
}
});
TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(super.getModel());
super.setRowSorter(sorter);
}
@Override
public Component prepareRenderer(TableCellRenderer renderer,
int rowIndex, int vColIndex) {
Component c = super.prepareRenderer(renderer, rowIndex, vColIndex);
if (c instanceof JComponent) {
JComponent jc = (JComponent) c;
jc.setToolTipText(getValueAt(rowIndex, vColIndex).toString());
}
return c;
}
@Override
public void repaint() {
super.repaint();
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
try {
return canEdit.get(rowIndex).get(columnIndex);
} catch (Exception ex) {
return padraoEdit;
}
}
@Override
public Class getColumnClass(int columnIndex) {
try {
return types.get(columnIndex);
} catch (Exception ex) {
return java.lang.String.class;
}
}
public DefaultTableModel getModelo() {
return (DefaultTableModel) super.getModel();
}
public boolean isPadraoEdit() {
return padraoEdit;
}
public void setPadraoEdit(boolean padraoEdit) {
this.padraoEdit = padraoEdit;
}
public Color getPadraoFonte() {
return padraoFonte;
}
public void setPadraoFonte(Color padraoFonte) {
this.padraoFonte = padraoFonte;
}
public Color getPadraoFonteSelec() {
return padraoFonteSelec;
}
public void setPadraoFonteSelec(Color padraoFonteSelec) {
this.padraoFonteSelec = padraoFonteSelec;
}
public Color getPadraoFundo() {
return padraoFundo;
}
public void setPadraoFundo(Color padraoFundo) {
this.padraoFundo = padraoFundo;
}
public Color getPadraoFundoSelec() {
return padraoFundoSelec;
}
public void setPadraoFundoSelec(Color padraoFundoSelec) {
this.padraoFundoSelec = padraoFundoSelec;
}
private ArrayList<ArrayList<Boolean>> altera(ArrayList<ArrayList<Boolean>> antes, Boolean padrao, int linhas, int colunas) {
if (linhas < 0) {
linhas = getRowCount();
}
if (colunas < 0) {
colunas = getColumnCount();
}
ArrayList<ArrayList<Boolean>> depois = new ArrayList<>();
for (int i = 0; i < linhas; i++) {
ArrayList<Boolean> col = new ArrayList<>();
for (int j = 0; j < colunas; j++) {
try {
col.add(antes.get(i).get(j));
} catch (Exception ex) {
col.add(padrao);
}
}
depois.add(col);
}
return depois;
}
private ArrayList<ArrayList<Color>> altera(ArrayList<ArrayList<Color>> antes, Color padrao, int linhas, int colunas) {
if (linhas < 0) {
linhas = getRowCount();
}
if (colunas < 0) {
colunas = getColumnCount();
}
ArrayList<ArrayList<Color>> depois = new ArrayList<>();
for (int i = 0; i < linhas; i++) {
ArrayList<Color> col = new ArrayList<>();
for (int j = 0; j < colunas; j++) {
try {
col.add(antes.get(i).get(j));
} catch (Exception ex) {
col.add(padrao);
}
}
depois.add(col);
}
return depois;
}
private ArrayList<Class> alteraTipo(ArrayList<Class> antes, int colunas) {
if (colunas < 0) {
colunas = getColumnCount();
}
ArrayList<Class> col = new ArrayList<>();
for (int j = 0; j < colunas; j++) {
try {
col.add(antes.get(j));
} catch (Exception ex) {
col.add(java.lang.String.class);
}
}
return col;
}
public boolean setEditable(int row, int column, boolean editable) {
try {
ArrayList<Boolean> aaFundo = canEdit.get(row);
aaFundo.set(column, editable);
canEdit.set(row, aaFundo);
return true;
} catch (Exception ex) {
setRowCount(getModelo().getRowCount());
setColumnCount(getModelo().getColumnCount());
try {
ArrayList<Boolean> aaFundo = canEdit.get(row);
aaFundo.set(column, editable);
canEdit.set(row, aaFundo);
return true;
} catch (Exception exx) {
return false;
}
}
}
public boolean setEditable(boolean etitable) {
try {
for (int row = 0; row < canEdit.size(); row++) {
ArrayList<Boolean> aa = canEdit.get(row);
for (int column = 0; column < aa.size(); column++) {
aa.set(column, etitable);
}
canEdit.set(row, aa);
}
return true;
} catch (Exception ex) {
setRowCount(getModelo().getRowCount());
setColumnCount(getModelo().getColumnCount());
try {
for (int row = 0; row < canEdit.size(); row++) {
ArrayList<Boolean> aa = canEdit.get(row);
for (int column = 0; column < aa.size(); column++) {
aa.set(column, etitable);
}
canEdit.set(row, aa);
}
return true;
} catch (Exception exx) {
return false;
}
}
}
public void setRowCount(int rowCount) {
corFundo = altera(corFundo, padraoFundo, rowCount, -1);
corFonte = altera(corFonte, padraoFonte, rowCount, -1);
corFundoSelec = altera(corFundoSelec, padraoFundoSelec, rowCount, -1);
corFonteSelec = altera(corFonteSelec, padraoFonteSelec, rowCount, -1);
getModelo().setRowCount(rowCount);
}
public void setColumnCount(int columnCount) {
types = alteraTipo(types, columnCount);
corFundo = altera(corFundo, padraoFundo, -1, columnCount);
corFonte = altera(corFonte, padraoFonte, -1, columnCount);
corFundoSelec = altera(corFundoSelec, padraoFundoSelec, -1, columnCount);
corFonteSelec = altera(corFonteSelec, padraoFonteSelec, -1, columnCount);
getModelo().setColumnCount(columnCount);
}
public boolean setRowColor(int row, Color backgorund, Color foreground) {
boolean b = true;
for (int i = 0; i < getColumnCount(); i++) {
b = b && setColor(row, i, backgorund, foreground);
}
return b;
}
public boolean setColor(int row, int column, Color backgorund, Color foreground) {
try {
ArrayList<Color> aaFundo = corFundo.get(row);
aaFundo.set(column, backgorund);
corFundo.set(row, aaFundo);
ArrayList<Color> aaFonte = corFonte.get(row);
aaFonte.set(column, foreground);
corFonte.set(row, aaFonte);
setValueAt(getValueAt(row, column), row, column);
return true;
} catch (Exception ex) {
setRowCount(getModelo().getRowCount());
setColumnCount(getModelo().getColumnCount());
try {
ArrayList<Color> aaFundo = corFundo.get(row);
aaFundo.set(column, backgorund);
corFundo.set(row, aaFundo);
ArrayList<Color> aaFonte = corFonte.get(row);
aaFonte.set(column, foreground);
corFonte.set(row, aaFonte);
setValueAt(getValueAt(row, column), row, column);
return true;
} catch (Exception exx) {
return false;
}
}
}
public Color getBackgroundColor(int row, int column) throws IndexOutOfBoundsException {
return corFundo.get(row).get(column);
}
public Color getForegroundColor(int row, int column) throws IndexOutOfBoundsException {
return corFonte.get(row).get(column);
}
public void addRow(ArrayList rowData, boolean editable) {
int rowCount = getRowCount() + 1;
corFundo = altera(corFundo, padraoFundo, rowCount, -1);
canEdit = altera(canEdit, editable, rowCount, -1);
corFonte = altera(corFonte, padraoFonte, rowCount, -1);
corFundoSelec = altera(corFundoSelec, padraoFundoSelec, rowCount, -1);
corFonteSelec = altera(corFonteSelec, padraoFonteSelec, rowCount, -1);
Object o[] = new Object[rowData.size()];
for (int i = 0; i < o.length; i++) {
o[i] = rowData.get(i);
}
getModelo().addRow(o);
this.repaint();
}
public void addColumn(Object columnName, Class type, boolean editable) {
int columnCount = getColumnCount() + 1;
types = alteraTipo(types, columnCount);
try {
types.set(getColumnCount(), type);
} catch (Exception ex) {
}
canEdit = altera(canEdit, padraoEdit, -1, columnCount);
corFundo = altera(corFundo, padraoFundo, -1, columnCount);
corFonte = altera(corFonte, padraoFonte, -1, columnCount);
corFundoSelec = altera(corFundoSelec, padraoFundoSelec, -1, columnCount);
corFonteSelec = altera(corFonteSelec, padraoFonteSelec, -1, columnCount);
getModelo().addColumn(columnName);
this.repaint();
}
public void addColumn(Object columnName, ArrayList columnData, boolean editable) {
int columnCount = getColumnCount() + 1;
types = alteraTipo(types, columnCount);
try {
types.set(getColumnCount(), columnData.get(0).getClass());
} catch (Exception ex) {
}
canEdit = altera(canEdit, padraoEdit, -1, columnCount);
corFundo = altera(corFundo, padraoFundo, -1, columnCount);
corFonte = altera(corFonte, padraoFonte, -1, columnCount);
corFundoSelec = altera(corFundoSelec, padraoFundoSelec, -1, columnCount);
corFonteSelec = altera(corFonteSelec, padraoFonteSelec, -1, columnCount);
Object o[] = new Object[columnData.size()];
for (int i = 0; i < o.length; i++) {
o[i] = columnData.get(i);
}
getModelo().addColumn(columnName, o);
this.repaint();
}
private void tabMouseClicked(java.awt.event.MouseEvent evt) {
if (evt.getClickCount() == 2 && evt.getButton() == java.awt.event.MouseEvent.BUTTON3) {
int selectRow = getSelectedRow();
int selectColumn = getSelectedColumn();
if (selectRow >= 0 && selectColumn >= 0) {
String val = getValueAt(selectRow, selectColumn).toString();
StringSelection ss = new StringSelection(val);
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(ss, ss);
}
}
/*
* if(evt.getButton()==java.awt.event.MouseEvent.BUTTON1){ int selectRow
* = getSelectedRow(); int selectColumn = getSelectedColumn();
* setRowColor(selectRow,
* corFundoSelec.get(selectRow).get(selectColumn),
* corFonteSelec.get(selectRow).get(selectColumn)); }
*/
}
public void filtro(Object value) {
TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(super.getModel());
if (value == null) {
sorter.setRowFilter(null);
super.setRowSorter(sorter);
return;
}
String text = value.toString();
if (text.length() == 0) {
sorter.setRowFilter(null);
} else {
try {
sorter.setRowFilter(
RowFilter.regexFilter("(?i)" + text));
} catch (PatternSyntaxException pse) {
}
}
super.setRowSorter(sorter);
}
public void clear() {
types = alteraTipo(types, 0);
corFundo = altera(corFundo, padraoFundo, 0, 0);
corFonte = altera(corFonte, padraoFonte, 0, 0);
canEdit = altera(canEdit, padraoEdit, 0, 0);
corFundoSelec = altera(corFundoSelec, padraoFundoSelec, 0, 0);
corFonteSelec = altera(corFonteSelec, padraoFonteSelec, 0, 0);
getModelo().setColumnCount(0);
getModelo().setRowCount(0);
this.repaint();
}
}