]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.spreadsheet.ui/src/org/simantics/spreadsheet/ui/RowHeaderRenderer.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.spreadsheet.ui / src / org / simantics / spreadsheet / ui / RowHeaderRenderer.java
1 package org.simantics.spreadsheet.ui;\r
2 \r
3 import java.awt.Color;\r
4 import java.awt.Component;\r
5 import java.awt.Dimension;\r
6 import java.util.HashMap;\r
7 import java.util.Map;\r
8 \r
9 import javax.swing.JLabel;\r
10 import javax.swing.JList;\r
11 import javax.swing.JTable;\r
12 import javax.swing.ListCellRenderer;\r
13 import javax.swing.SwingConstants;\r
14 import javax.swing.table.JTableHeader;\r
15 \r
16 public class RowHeaderRenderer implements ListCellRenderer {\r
17 \r
18         private static Color ROW_HEADER_BACKGROUND = new Color(240, 240, 240);\r
19         \r
20         final Map<Integer, JLabel> labels = new HashMap<Integer, JLabel>();\r
21         final JTable table;\r
22         final JTableHeader header;\r
23 \r
24         RowHeaderRenderer(JTable table) {\r
25                 header = table.getTableHeader();\r
26                 this.table = table;\r
27         }\r
28 \r
29         private JLabel newLabel() {\r
30                 JLabel label = new JLabel();\r
31                 label.setOpaque(true);\r
32                 label.setBorder(TableBorder.BORDER);\r
33                 label.setHorizontalAlignment(SwingConstants.CENTER);\r
34                 label.setForeground(header.getForeground());\r
35                 label.setBackground(ROW_HEADER_BACKGROUND);\r
36                 label.setFont(header.getFont());\r
37                 return label;\r
38         }\r
39 \r
40         public Component getListCellRendererComponent(JList list, Object value,\r
41                         int index, boolean isSelected, boolean cellHasFocus) {\r
42 \r
43                 JLabel label = labels.get(index);\r
44                 if(label == null) {\r
45                         label = newLabel();\r
46                         labels.put(index, label);\r
47                 }\r
48 \r
49                 label.setText((value == null) ? "" : value.toString());\r
50 \r
51                 int height = table.getRowHeight(index);\r
52                 label.setPreferredSize(new Dimension(label.getWidth(), height));\r
53                 \r
54                 return label;\r
55 \r
56         }\r
57 }\r