package org.simantics.spreadsheet.ui; import java.awt.Color; import java.awt.Component; import java.awt.Dimension; import java.util.HashMap; import java.util.Map; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JTable; import javax.swing.ListCellRenderer; import javax.swing.SwingConstants; import javax.swing.table.JTableHeader; public class RowHeaderRenderer implements ListCellRenderer { private static Color ROW_HEADER_BACKGROUND = new Color(240, 240, 240); final Map labels = new HashMap(); final JTable table; final JTableHeader header; RowHeaderRenderer(JTable table) { header = table.getTableHeader(); this.table = table; } private JLabel newLabel() { JLabel label = new JLabel(); label.setOpaque(true); label.setBorder(TableBorder.BORDER); label.setHorizontalAlignment(SwingConstants.CENTER); label.setForeground(header.getForeground()); label.setBackground(ROW_HEADER_BACKGROUND); label.setFont(header.getFont()); return label; } public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { JLabel label = labels.get(index); if(label == null) { label = newLabel(); labels.put(index, label); } label.setText((value == null) ? "" : value.toString()); int height = table.getRowHeight(index); label.setPreferredSize(new Dimension(label.getWidth(), height)); return label; } }