package elw.dp.ui; import javax.swing.*; import javax.swing.table.TableCellRenderer; import java.awt.*; public class AccessTrackingCellRenderer implements TableCellRenderer { private final TableCellRenderer wrapped; private final RendererFactory factory; private static final Color W_COLOR = new Color(0xFF, 0xDD, 0xDD); private static final Color R_COLOR = new Color(0xEE, 0xDD, 0xFF); private static final Color N_COLOR = Color.white; public AccessTrackingCellRenderer(TableCellRenderer wrapped, RendererFactory factory) { this.wrapped = wrapped; this.factory = factory; } public Component getTableCellRendererComponent(JTable table, Object obj, boolean isSelected, boolean hasFocus, int row, int column) { Component cell = wrapped.getTableCellRendererComponent(table, obj, isSelected, hasFocus, row, column); final int accCol = factory.lookupAccessColumn(table); if (accCol < 0 || isSelected) { return cell; } final String acc = (String) table.getModel().getValueAt(row, accCol); if (acc.indexOf("w") >= 0) { cell.setBackground(darker(W_COLOR, row)); } else if (acc.indexOf("r") >= 0) { cell.setBackground(darker(R_COLOR, row)); } else { cell.setBackground(darker(N_COLOR, row)); } return cell; } private Color darker(Color what, int row) { if (row % 2 == 0) { return what; } return new Color( Math.max((int) (what.getRed() * 0.95), 0), Math.max((int) (what.getGreen() * 0.95), 0), Math.max((int) (what.getBlue() * 0.95), 0) ); } }