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