1 package fr.ifremer.quadrige3.ui.swing.table.renderer;
2
3 /*-
4 * #%L
5 * Quadrige3 Core :: Quadrige3 UI Common
6 * $Id:$
7 * $HeadURL:$
8 * %%
9 * Copyright (C) 2017 Ifremer
10 * %%
11 * This program is free software: you can redistribute it and/or modify
12 * it under the terms of the GNU Affero General Public License as published by
13 * the Free Software Foundation, either version 3 of the License, or
14 * (at your option) any later version.
15 *
16 * This program is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 * GNU General Public License for more details.
20 *
21 * You should have received a copy of the GNU Affero General Public License
22 * along with this program. If not, see <http://www.gnu.org/licenses/>.
23 * #L%
24 */
25
26
27 import javax.swing.Icon;
28 import javax.swing.JLabel;
29 import javax.swing.JTable;
30 import javax.swing.SwingConstants;
31 import javax.swing.table.DefaultTableCellRenderer;
32 import java.awt.Component;
33
34 /**
35 * render an object in a cell with an Icon
36 *
37 * @author Ludovic Pecquot <ludovic.pecquot@e-is.pro>
38 * @param <T> the type of Object to render as an Icon
39 */
40 public abstract class IconCellRenderer<T> extends DefaultTableCellRenderer {
41
42 /**
43 * <p>getIcon.</p>
44 *
45 * @param object a T object.
46 * @return a {@link Icon} object.
47 */
48 protected abstract Icon getIcon(T object);
49
50 /**
51 * <p>getToolTipText.</p>
52 *
53 * @param object a T object.
54 * @return a {@link String} object.
55 */
56 protected abstract String getToolTipText(T object);
57
58 /**
59 * <p>getText.</p>
60 *
61 * @param object a T object.
62 * @return a {@link String} object.
63 */
64 protected abstract String getText(T object);
65
66 /** {@inheritDoc} */
67 @Override
68 @SuppressWarnings("unchecked")
69 public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
70 JLabel label = (JLabel) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
71
72 // reset foreground color
73 label.setForeground(table.getForeground());
74
75 label.setHorizontalAlignment(JLabel.CENTER);
76 label.setText(getText((T) value));
77 label.setIcon(getIcon((T) value));
78 label.setToolTipText(getToolTipText((T) value));
79 label.setHorizontalAlignment(SwingConstants.LEFT);
80
81 return label;
82 }
83
84 }