package com.revolsys.swing.table.renderer;
import java.awt.Component;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.table.TableCellRenderer;
import org.jdesktop.swingx.VerticalLayout;
public class MultiTableCellRenderer implements TableCellRenderer, MouseListener {
private final JPanel panel = new JPanel();
private final List<Object> renderers;
public MultiTableCellRenderer(final Object... renderers) {
if (renderers == null) {
this.renderers = Collections.emptyList();
} else {
this.renderers = Arrays.asList(renderers);
}
this.panel.setOpaque(false);
this.panel.setLayout(new VerticalLayout());
}
@Override
public Component getTableCellRendererComponent(final JTable table, final Object value,
final boolean isSelected, final boolean hasFocus, final int row, final int column) {
this.panel.removeAll();
for (final Object object : this.renderers) {
Component component = null;
if (object instanceof TableCellRenderer) {
final TableCellRenderer renderer = (TableCellRenderer)object;
component = renderer.getTableCellRendererComponent(table, value, isSelected, hasFocus, row,
column);
} else if (object instanceof Component) {
component = (Component)object;
}
if (component != null) {
this.panel.add(component);
}
}
return this.panel;
}
@Override
public void mouseClicked(final MouseEvent e) {
final MouseListener[] listeners = this.panel.getListeners(MouseListener.class);
for (final MouseListener mouseListener : listeners) {
mouseListener.mouseClicked(e);
}
}
@Override
public void mouseEntered(final MouseEvent e) {
final MouseListener[] listeners = this.panel.getListeners(MouseListener.class);
for (final MouseListener mouseListener : listeners) {
mouseListener.mouseEntered(e);
}
}
@Override
public void mouseExited(final MouseEvent e) {
final MouseListener[] listeners = this.panel.getListeners(MouseListener.class);
for (final MouseListener mouseListener : listeners) {
mouseListener.mouseExited(e);
}
}
@Override
public void mousePressed(final MouseEvent e) {
final MouseListener[] listeners = this.panel.getListeners(MouseListener.class);
for (final MouseListener mouseListener : listeners) {
mouseListener.mousePressed(e);
}
}
@Override
public void mouseReleased(final MouseEvent e) {
final MouseListener[] listeners = this.panel.getListeners(MouseListener.class);
for (final MouseListener mouseListener : listeners) {
mouseListener.mouseReleased(e);
}
}
}