/**
* MultisortTableHeaderCellRenderer class written by Darryl from
* https://tips4java.wordpress.com/2010/08/22/alpha-icons/
*
* Open licence code.
*/
package org.openpnp.gui;
import javax.swing.Icon;
import javax.swing.JTable;
import javax.swing.RowSorter;
import javax.swing.UIManager;
/**
* An extension of <code>DefaultTableHeaderCellRenderer</code> that paints sort icons
* on the header of each sorted column with varying opacity.
* @author Darryl
*/
public class MultisortTableHeaderCellRenderer extends DefaultTableHeaderCellRenderer {
private float alpha;
/**
* Constructs a <code>MultisortTableHeaderCellRenderer</code> with a default alpha of 0.5.
*/
public MultisortTableHeaderCellRenderer() {
this(0.5F);
}
/**
* Constructs a <code>MultisortTableHeaderCellRenderer</code> with the specified alpha.
* A lower value represents greater contrast between icons, while a higher value can make
* more sort icons visible.
*
* @param alpha the opacity, in the range 0.0F to 1.0F. Recommended range: 0.5F to 0.7F.
*/
public MultisortTableHeaderCellRenderer(float alpha) {
this.alpha = alpha;
}
/**
* Overridden to return an icon suitable to a sorted column, or null if the column is unsorted.
* The icon for the primary sorted column is fully opaque, and the opacity is reduced by a
* factor of <code>alpha</code> for each subsequent sort index.
*
* @param table the <code>JTable</code>.
* @param column the column index.
* @return the sort icon with appropriate opacity, or null if the column is unsorted.
*/
@Override
public Icon getIcon(JTable table, int column) {
float computedAlpha = 1.0F;
for (RowSorter.SortKey sortKey : table.getRowSorter().getSortKeys()) {
if (table.convertColumnIndexToView(sortKey.getColumn()) == column) {
switch (sortKey.getSortOrder()) {
case ASCENDING:
return new AlphaIcon(UIManager.getIcon("Table.ascendingSortIcon"), computedAlpha);
case DESCENDING:
return new AlphaIcon(UIManager.getIcon("Table.descendingSortIcon"), computedAlpha);
}
}
computedAlpha *= alpha;
}
return null;
}
}