JTableHeader tableHeader = table.getTableHeader();
TableHeaderUI tableHeaderUI = tableHeader.getUI();
if (SubstanceLookAndFeel.isCurrentLookAndFeel()
&& (tableHeaderUI instanceof SubstanceTableHeaderUI)) {
SubstanceTableHeaderUI ui = (SubstanceTableHeaderUI) tableHeaderUI;
StateTransitionTracker.ModelStateInfo modelStateInfo = ui
.getModelStateInfo(column);
ComponentState currState = ui.getColumnState(column);
if (modelStateInfo != null) {
Map<ComponentState, StateContributionInfo> activeStates = modelStateInfo
.getStateContributionMap();
SubstanceColorScheme colorScheme = getColorSchemeForState(
tableHeader, currState);
if (currState.isDisabled() || (activeStates == null)
|| (activeStates.size() == 1)) {
super.setForeground(new ColorUIResource(colorScheme
.getForegroundColor()));
} else {
float aggrRed = 0;
float aggrGreen = 0;
float aggrBlue = 0;
for (Map.Entry<ComponentState, StateTransitionTracker.StateContributionInfo> activeEntry : modelStateInfo
.getStateContributionMap().entrySet()) {
ComponentState activeState = activeEntry.getKey();
SubstanceColorScheme scheme = getColorSchemeForState(
tableHeader, activeState);
Color schemeFg = scheme.getForegroundColor();
float contribution = activeEntry.getValue()
.getContribution();
aggrRed += schemeFg.getRed() * contribution;
aggrGreen += schemeFg.getGreen() * contribution;
aggrBlue += schemeFg.getBlue() * contribution;
}
super.setForeground(new ColorUIResource(new Color(
(int) aggrRed, (int) aggrGreen, (int) aggrBlue)));
}
} else {
SubstanceColorScheme scheme = getColorSchemeForState(
tableHeader, currState);
super.setForeground(new ColorUIResource(scheme
.getForegroundColor()));
}
} else {
super.setForeground(table.getForeground());
}
this.setBackground(tableHeader.getBackground());
// fix for issue 319 - using font from the table header
if (tableHeader.getFont() != null) {
setFont(tableHeader.getFont());
} else {
setFont(table.getFont());
}
TableUI tableUI = table.getUI();
if (SubstanceLookAndFeel.isCurrentLookAndFeel()
&& (tableUI instanceof SubstanceTableUI)) {
this.setBorder(new EmptyBorder(((SubstanceTableUI) tableUI)
.getCellRendererInsets()));
}
this.setValue(value);
this.setOpaque(false);
this.setEnabled(tableHeader.isEnabled() && table.isEnabled());
// fix for defect 242 - not showing sort icon
if (SubstanceLookAndFeel.isCurrentLookAndFeel()) {
this.setIcon(null);
RowSorter<? extends TableModel> rowSorter = table.getRowSorter();
if (rowSorter != null) {
setHorizontalTextPosition(JLabel.LEADING);
java.util.List<? extends RowSorter.SortKey> sortKeys = rowSorter
.getSortKeys();
Icon sortIcon = null;
SubstanceColorScheme scheme = null;
if (tableHeaderUI instanceof SubstanceTableHeaderUI) {
SubstanceTableHeaderUI ui = (SubstanceTableHeaderUI) tableHeaderUI;
ComponentState state = ui.getColumnState(column);
ColorSchemeAssociationKind colorSchemeAssociationKind = (state == ComponentState.ENABLED) ? ColorSchemeAssociationKind.MARK
: ColorSchemeAssociationKind.HIGHLIGHT_MARK;
scheme = SubstanceColorSchemeUtilities.getColorScheme(
tableHeader, colorSchemeAssociationKind, state);
} else {