private SubstanceColorScheme getColorSchemeForState( JTable table, SubstanceTableUI ui, ComponentState state) { UpdateOptimizationInfo updateOptimizationInfo = ui.getUpdateOptimizationInfo(); if (state == ComponentState.ENABLED) { if (updateOptimizationInfo == null) { return SubstanceColorSchemeUtilities.getColorScheme(table, state); } else { return updateOptimizationInfo.getDefaultScheme(); } } else { if (updateOptimizationInfo == null) { return SubstanceColorSchemeUtilities.getColorScheme( table, ColorSchemeAssociationKind.HIGHLIGHT, state); } else { return updateOptimizationInfo.getHighlightColorScheme(state); } } }
public Component getTableCellRendererComponentWithSubstance( JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int 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 : " // + hasFocus + ", focusState : " + focusState); if (focusStateTransitionTracker != null) { border.setAlpha(focusStateTransitionTracker.getFocusStrength(hasFocus)); } // special case for tables with no grids if (!table.getShowHorizontalLines() && !table.getShowVerticalLines()) { this.setBorder( new CompoundBorder( new EmptyBorder(table.getRowMargin() / 2, 0, table.getRowMargin() / 2, 0), border)); } else { this.setBorder(border); } } else { this.setBorder( new EmptyBorder(regInsets.top, regInsets.left, regInsets.bottom, regInsets.right)); } setValue(Math.min(100, getBarStatus(value))); setString(getDescription(value)); this.setOpaque(false); this.setEnabled(table.isEnabled()); return this; }