Your renderer is choosing the color based on the row
parameter passed to prepareRenderer()
. The predicate row % 2 == 0
selects alternating rows for shading, as shown in your picture. Your question implies that you actually want to base shading on the value of column zero, ID
. For this you need to examine the result of the getValueAt(row, 0)
.
The exact formulation depends on your model. Using this example, the following renderer shades rows starting with the letter "T".
private JTable table = new JTable(dataModel) {
@Override
public Component prepareRenderer(TableCellRenderer renderer, int row, int col) {
Component comp = super.prepareRenderer(renderer, row, col);
int modelRow = convertRowIndexToModel(row);
if (((String) dataModel.getValueAt(modelRow, 0)).startsWith("T")
&& !isCellSelected(row, col)) {
comp.setBackground(Color.lightGray);
} else {
comp.setBackground(Color.white);
}
return comp;
}
};
Addendum: @mKorbel helpfully comments on the need to convert between model and view coordinates when sorting is enabled, as discussed here.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…