/**
 * Lets you render table data choosing the colours.
 */
package com.mindprod.vercheck;

import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableCellRenderer;
import java.awt.Color;
import java.awt.Component;
import java.awt.Font;

/**
 * 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
     */
    @SuppressWarnings( { "SameParameterValue" } )
    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 );

        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;
        }
    }