/*******************************************************************************
* Copyright (c) 2004, 2010 BREDEX GmbH.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* BREDEX GmbH - initial API and implementation and/or initial documentation
*******************************************************************************/
package org.eclipse.jubula.examples.aut.dvdtool.gui;
import java.awt.Color;
import java.awt.Component;
import javax.swing.JCheckBox;
import javax.swing.JTable;
import javax.swing.SwingConstants;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableCellRenderer;
/**
* This is a table cell renderer which displays the rows in two alternate
* background colors.
*
* @author BREDEX GmbH
* @created 11.04.2005
*/
public class EvenOddTableCellRenderer implements TableCellRenderer {
/** the component (check box) used to render boolean values */
private JCheckBox m_boolRenderer = new JCheckBox();
/** the renderer which *really* does the work */
private DefaultTableCellRenderer m_defaultRenderer =
new DefaultTableCellRenderer();
/**
* public constructor, initialises this renderer
*/
public EvenOddTableCellRenderer() {
super();
init();
}
/**
* private method for initialisation
*/
private void init() {
m_boolRenderer.setOpaque(true);
m_boolRenderer.setHorizontalAlignment(SwingConstants.CENTER);
}
/**
* private method determining the background color for the row
* <code>row</code>
*
* @param row
* the row number
* @return the <code>Color</code> to use for the background of row
* <code>row</code>
*/
private Color getBackgroundColor(int row) {
return row % 2 == 0 ? Color.yellow : Color.white;
}
/**
* Private method configuring and returning a check box to be used as
* renderer for boolean values.
*
* @param table
* the <code>JTable</code> that is asking the renderer to draw;
* can be <code>null</code>
* @param value
* the value of the cell to be rendered. Must be a Boolean.
* @param isSelected
* true if the cell is to be rendered with the selection
* highlighted; otherwise false
* @param row
* the row index of the cell being drawn. <br>
* determines the background color
* @return a configured CheckBox
*/
private JCheckBox getBooleanRenderer(JTable table, Object value,
boolean isSelected, int row) {
if (isSelected) {
m_boolRenderer.setForeground(table.getSelectionForeground());
m_boolRenderer.setBackground(table.getSelectionBackground());
} else {
m_boolRenderer.setForeground(table.getForeground());
m_boolRenderer.setBackground(getBackgroundColor(row));
}
m_boolRenderer.setSelected(((Boolean) value).booleanValue());
return m_boolRenderer;
}
/**
* {@inheritDoc}
* java.lang.Object, boolean, boolean, int, int)
*/
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
if (value instanceof Boolean) {
return getBooleanRenderer(
table, value, isSelected, row);
}
m_defaultRenderer.getTableCellRendererComponent(
table, value, isSelected, hasFocus, row, column);
m_defaultRenderer.setHorizontalAlignment(value instanceof Number
? SwingConstants.RIGHT : SwingConstants.LEFT);
if (!isSelected) {
m_defaultRenderer.setBackground(getBackgroundColor(row));
}
m_defaultRenderer.setOpaque(true);
if (table.isEnabled()) {
m_defaultRenderer.setForeground(table.getForeground());
} else {
m_defaultRenderer.setForeground(Color.gray);
}
return m_defaultRenderer;
}
}