package com.intellij.util.ui.table; import com.intellij.openapi.util.Iconable; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.swing.*; import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.TableCellRenderer; import java.awt.*; public abstract class IconTableCellRenderer<T> extends DefaultTableCellRenderer { public static final IconTableCellRenderer<Iconable> ICONABLE = new IconTableCellRenderer<Iconable>() { @Nullable @Override protected Icon getIcon(@NotNull Iconable value, JTable table, int row) { return value.getIcon(Iconable.ICON_FLAG_VISIBILITY); } }; public static TableCellRenderer create(@NotNull final Icon icon) { return new IconTableCellRenderer() { @Nullable @Override protected Icon getIcon(@NotNull Object value, JTable table, int row) { return icon; } }; } @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean selected, boolean focus, int row, int column) { super.getTableCellRendererComponent(table, value, selected, focus, row, column); //noinspection unchecked setIcon(value == null ? null : getIcon((T)value, table, row)); if (isCenterAlignment()) { setHorizontalAlignment(CENTER); setVerticalAlignment(CENTER); } return this; } protected boolean isCenterAlignment() { return false; } @Nullable protected abstract Icon getIcon(@NotNull T value, JTable table, int row); }