/* * Beanfabrics Framework Copyright (C) by Michael Karneim, beanfabrics.org * Use is subject to license terms. See license.txt. */ // TODO javadoc - remove this comment only when the class and all non-public // methods and fields are documented package org.beanfabrics.swing.table.cellrenderer; import java.awt.Component; import java.util.ArrayList; import java.util.List; import javax.swing.JList; import javax.swing.JTable; import javax.swing.table.TableCellRenderer; import org.beanfabrics.swing.table.BnTable; /** * The <code>BnTableCellRenderer</code> is the general {@link TableCellRenderer} * for the {@link BnTable}. * <p> * It delegates calls of * {@link #getListCellRendererComponent(JList, Object, int, boolean, boolean)} * to each of it's installed renderers (see {@link #getInstalledRenderers()}) * until it receives a not-<code>null</code> result. * </p> * <p> * If no renderer component is found at all it returns an {@link EmptyRenderer} * as fallback. * </p> * <p> * To install a custom renderer just add it to the list of installed renderers. * </p> * * @author Michael Karneim */ public class BnTableCellRenderer implements TableCellRenderer { private final TableCellRenderer FALLBACK_RENDERER = new EmptyRenderer(); private final List<TableCellRenderer> installedRenderers = new ArrayList<TableCellRenderer>(); public BnTableCellRenderer() { installDefaultRenderers(); } /** {@inheritDoc} */ public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { for (TableCellRenderer renderer : installedRenderers) { Component comp = renderer.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); if (comp != null) { return comp; } } return FALLBACK_RENDERER.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); } private void installDefaultRenderers() { installedRenderers.add(new BooleanPMTableCellRenderer()); installedRenderers.add(new TextPMTableCellRenderer()); installedRenderers.add(new IconPMTableCellRenderer()); } public List<TableCellRenderer> getInstalledRenderers() { return installedRenderers; } }