Re: Changing the Background Color for One Cell in a JTable
I would write a OneCellRenderer that looked something like this:
package com.mindprod.vercheck;
import javax.swing.*;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableCellRenderer;
import java.awt.*;
/**
* render JTable String column, in a selected font, colours and
alignment. Engage with: columnModel.getColumn( col
* ).setCellRenderer( new RainbowRenderer( font, foreground,
background, JLabel.CENTER ) )
*/
final class RainbowRenderer extends DefaultTableCellRenderer
implements TableCellRenderer
{
private final Color foreground;
private final Font font;
private final int horizontalAlignment;
// -------------------------- PUBLIC INSTANCE METHODS
--------------------------
/**
* constructor
*
* @param font for to render the column
* @param foreground foreground colour
* @param horizontalAlignment e.g. JLabel.CENTER
*/
public RainbowRenderer( Font font,
Color foreground,
int horizontalAlignment )
{
this.foreground = foreground;
this.font = font;
this.horizontalAlignment = horizontalAlignment;
}
public Component getTableCellRendererComponent( JTable table,
Object value,
boolean
isSelected,
boolean hasFocus,
int row,
int column )
{
JLabel template = (JLabel)
super.getTableCellRendererComponent( table, value,
isSelected, hasFocus, row, column );
if ( ???? the special cell )
{
template.setFont( specialFont );
template.setForeground( specialForeground );
}
else
{
template.setFont( font );
template.setForeground( foreground );
}
// we don't handle setting selected background here.
// We don't get called when selection changes.
// leave it up to JTable to set the background to selected or
normal.
template.setHorizontalAlignment( horizontalAlignment );
if ( value != null )
{
template.setText( value.toString() );
}
else
{
template.setText( null );
}
return template;
}
--
Roedy Green, Canadian Mind Products
The Java Glossary, http://mindprod.com