package org.appwork.utils.swing.table.columns; import javax.swing.BorderFactory; import javax.swing.Icon; import javax.swing.JComponent; import org.appwork.utils.swing.renderer.RenderLabel; import org.appwork.utils.swing.table.ExtColumn; import org.appwork.utils.swing.table.ExtDefaultRowSorter; import org.appwork.utils.swing.table.ExtTable; import org.appwork.utils.swing.table.ExtTableModel; /** * Single icon column */ public abstract class ExtIconColumn<E> extends ExtColumn<E> { private RenderLabel label; public ExtIconColumn(String name) { this(name, null); } public ExtIconColumn(String name, ExtTableModel<E> table) { super(name, table); label = new RenderLabel(); label.setOpaque(false); label.setHorizontalAlignment(RenderLabel.CENTER); label.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 5)); initIcons(); this.setRowSorter(new ExtDefaultRowSorter<E>() { /** * sorts the icon by hashcode */ @Override public int compare(E o1, E o2) { Icon ic1 = getIcon(o1); Icon ic2 = getIcon(o2); int h1 = ic1 == null ? 0 : ic1.hashCode(); int h2 = ic2 == null ? 0 : ic2.hashCode(); if (h1 == h2) return 0; if (this.isSortOrderToggle()) { return h1 > h2 ? -1 : 1; } else { return h2 < h1 ? -1 : 1; } } }); } protected String getToolTip(E obj) { return null; } protected void initIcons() { } private static final long serialVersionUID = -5751315870107507714L; /** * Returns the icon for o1; */ protected abstract Icon getIcon(E value); @Override public Object getCellEditorValue() { return null; } @Override public boolean isEditable(E obj) { return false; } @Override public boolean isEnabled(E obj) { return true; } @Override public boolean isSortable(E obj) { return true; } @Override public void setValue(Object value, E object) { } /** * Sets max width to 30. overwrite to set other maxsizes */ @Override protected int getMaxWidth() { return 30; } @Override public int getMinWidth() { return 30; } @Override public JComponent getRendererComponent(ExtTable<E> table, E value, boolean isSelected, boolean hasFocus, int row, int column) { label.setIcon(getIcon(value)); label.setToolTipText(getToolTip(value)); label.setEnabled(isEnabled(value)); return label; } }