1 package org.simantics.spreadsheet.ui;
4 import java.awt.Component;
5 import java.awt.Dimension;
6 import java.util.HashMap;
9 import javax.swing.JLabel;
10 import javax.swing.JList;
11 import javax.swing.JTable;
12 import javax.swing.ListCellRenderer;
13 import javax.swing.SwingConstants;
14 import javax.swing.table.JTableHeader;
16 public class RowHeaderRenderer implements ListCellRenderer {
18 private static Color ROW_HEADER_BACKGROUND = new Color(240, 240, 240);
20 final Map<Integer, JLabel> labels = new HashMap<Integer, JLabel>();
22 final JTableHeader header;
24 RowHeaderRenderer(JTable table) {
25 header = table.getTableHeader();
29 private JLabel newLabel() {
30 JLabel label = new JLabel();
31 label.setOpaque(true);
32 label.setBorder(TableBorder.BORDER);
33 label.setHorizontalAlignment(SwingConstants.CENTER);
34 label.setForeground(header.getForeground());
35 label.setBackground(ROW_HEADER_BACKGROUND);
36 label.setFont(header.getFont());
40 public Component getListCellRendererComponent(JList list, Object value,
41 int index, boolean isSelected, boolean cellHasFocus) {
43 JLabel label = labels.get(index);
46 labels.put(index, label);
49 label.setText((value == null) ? "" : value.toString());
51 int height = table.getRowHeight(index);
52 label.setPreferredSize(new Dimension(label.getWidth(), height));