net.sf.cuf.ui.table.SortableHeaderRenderer Maven / Gradle / Ivy
The newest version!
package net.sf.cuf.ui.table;
import javax.swing.BorderFactory;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.RowSorter;
import javax.swing.SwingConstants;
import javax.swing.UIManager;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableCellRenderer;
import java.awt.Component;
import java.util.List;
/**
* This renderer enables to show direction of all columns which are already sorted
* As it bases on JLable, it must first remove existing sorting icon from border
*/
public class SortableHeaderRenderer extends DefaultTableCellRenderer
{
/** the original render */
private final TableCellRenderer mDelegate;
public SortableHeaderRenderer(TableCellRenderer pDelegate)
{
super();
mDelegate = pDelegate;
setVerticalAlignment(SwingConstants.TOP);
setHorizontalAlignment(SwingConstants.CENTER);
}
@Override
public Component getTableCellRendererComponent(JTable pTable, Object pValue, boolean pIsSelected, boolean pHasFocus, int pRow, int pColumn)
{
Component comp = mDelegate.getTableCellRendererComponent(pTable, pValue, pIsSelected, pHasFocus, pRow, pColumn);
if (!(comp instanceof JLabel))
{
// if the delegate render does not return a label, we do nothing
return comp;
}
JLabel label = (JLabel) comp;
RowSorter> sorter = pTable.getRowSorter();
if (sorter == null)
{
// if there is no sorter, we don't need to do anything
return comp;
}
// removes existing border by replacing with standard one
// the values and border type are based on
// com.sun.java.swing.plaf.windows.WindowsTableHeaderUI.XPDefaultRenderer
int topMargin = 6;
int leftMargin = 5;
int bottomMargin = 4;
int rightMargin = 5;
label.setBorder(BorderFactory.createEmptyBorder(topMargin, leftMargin, bottomMargin, rightMargin));
List extends RowSorter.SortKey> sortKeys = sorter.getSortKeys();
// check all sorters and set appropriate icon
for (RowSorter.SortKey sortKey : sortKeys)
{
if (sortKey.getColumn() == pTable.convertColumnIndexToModel(pColumn))
{
switch (sortKey.getSortOrder())
{
case ASCENDING:
label.setIcon(UIManager.getIcon("Table.ascendingSortIcon"));
break;
case DESCENDING:
label.setIcon(UIManager.getIcon("Table.descendingSortIcon"));
break;
case UNSORTED:
label.setIcon(null);
break;
}
}
}
return label;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy