i am trying to set the color of row of a Swing Jtable. i use this class to extend Jtable as suggest on the net.
public class ColorTable extends JTable {
private static final long serialVersionUID = 1L;
private Map rowColor = new HashMap();
private Map columnColor = new HashMap();
private Color cellColor;
private Color defaultColor;
public ColorTable( TableModel model ) {
super( model );
}
public void setRowColor( int row, Color c) {
rowColor.put( new Integer( row ), c );
}
public void setColumnColor( int column, Color c ) {
columnColor.put( new Integer( column ), c );
}
public void setCellColor( Color c ) {
cellColor = c;
}
public Class getColumnClass(int column) {
return getValueAt(0, column).getClass();
}
public Component prepareRenderer( TableCellRenderer renderer, int row, int column ) {
Component c = super.prepareRenderer( renderer, row, column );
if ( defaultColor == null )
defaultColor = c.getBackground();
// Color order is as follows:
// rowSelection, checkBox toggle for row color, column color, cell color
if ( ! isRowSelected( row ) ) {
Color color = (Color) rowColor.get( new Integer( row ) );
if ( color == null || Boolean.FALSE.equals( getModel().getValueAt( row, 0 ) ) )
color = (Color) columnColor.get( new Integer( column ) );
if ( color == null ) {
// cell color only if cell has special value, for example purposes,
// if the cell value begins with a 2
Object value = getValueAt( row, column );
if ( value != null && value.toString().startsWith( "2" ) )
color = cellColor;
}
if ( color != null )
c.setBackground( color );
else
c.setBackground( defaultColor );
}
return c;
}
public void resetColor(Color color) {
for(int i=0;i<this.getRowCount();i++)
this.setRowColor(i, color);
}
}
I simply added the method resetColor(Color color) in order to initialize all the row with the same color.
It seams to work at first use but when i want to change the colors i get problems. for instance if I execute the sollowing code within a button action listener i color the table properly just at the first iteration and after never changes the background.
deployTable.resetColor(Color.green);
// set red background to the
for (Integer x : indexes) {
System.out.println("index "+x+" red!");
deployTable.setRowColor(x, Color.red);
}
deployTable.revalidate();
does anyone has any idea about what could it be??
Thanks, Ste
repaint()
. – Tripletail