if (!SubstanceLookAndFeel.isCurrentLookAndFeel())
return super.getTableCellRendererComponent(table, value,
isSelected, hasFocus, row, column);
TableUI tableUI = table.getUI();
SubstanceTableUI ui = (SubstanceTableUI) tableUI;
// Recompute the focus indication to prevent flicker - JTable
// registers a listener on selection changes and repaints the
// relevant cell before our listener (in TableUI) gets the
// chance to start the fade sequence. The result is that the
// first frame uses full opacity, and the next frame starts the
// fade sequence. So, we use the UI delegate to compute the
// focus indication.
hasFocus = ui.isFocusedCell(row, column);
TableCellId cellId = new TableCellId(row, column);
StateTransitionTracker.ModelStateInfo modelStateInfo = ui
.getModelStateInfo(cellId);
ComponentState currState = ui.getCellState(cellId);
// special case for drop location
JTable.DropLocation dropLocation = table.getDropLocation();
boolean isDropLocation = (dropLocation != null
&& !dropLocation.isInsertRow()
&& !dropLocation.isInsertColumn()
&& dropLocation.getRow() == row && dropLocation.getColumn() == column);
if (!isDropLocation && (modelStateInfo != null)) {
if (ui.hasRolloverAnimations() || ui.hasSelectionAnimations()) {
Map<ComponentState, StateContributionInfo> activeStates = modelStateInfo
.getStateContributionMap();
SubstanceColorScheme colorScheme = getColorSchemeForState(
table, ui, 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(
table, ui, 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(table, ui,
currState);
super.setForeground(new ColorUIResource(scheme
.getForegroundColor()));
}
} else {
SubstanceColorScheme scheme = getColorSchemeForState(table, ui,
currState);
if (isDropLocation) {
scheme = SubstanceColorSchemeUtilities.getColorScheme(table,
ColorSchemeAssociationKind.TEXT_HIGHLIGHT, currState);
}
super
.setForeground(new ColorUIResource(scheme
.getForegroundColor()));
}
SubstanceStripingUtils.applyStripedBackground(table, row, this);
this.setFont(table.getFont());
TableCellId cellFocusId = new TableCellId(row, column);
StateTransitionTracker focusStateTransitionTracker = ui
.getStateTransitionTracker(cellFocusId);
Insets regInsets = ui.getCellRendererInsets();
if (hasFocus || (focusStateTransitionTracker != null)) {
SubstanceTableCellBorder border = new SubstanceTableCellBorder(
regInsets, ui, cellFocusId);
// System.out.println("[" + row + ":" + column + "] hasFocus : "