View Javadoc

1   /*
2    * Copyright (c) 2003-2008 by Cosylab d. d.
3    *
4    * This file is part of CosyBeans-Common.
5    *
6    * CosyBeans-Common is free software: you can redistribute it and/or modify
7    * it under the terms of the GNU General Public License as published by
8    * the Free Software Foundation, either version 3 of the License, or
9    * (at your option) any later version.
10   *
11   * CosyBeans-Common is distributed in the hope that it will be useful,
12   * but WITHOUT ANY WARRANTY; without even the implied warranty of
13   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14   * GNU General Public License for more details.
15   *
16   * You should have received a copy of the GNU General Public License
17   * along with CosyBeans-Common.  If not, see <http://www.gnu.org/licenses/>.
18   */
19  
20  package com.cosylab.gui.components.table.renderers;
21  
22  import java.awt.Component;
23  import java.text.SimpleDateFormat;
24  import java.util.Date;
25  
26  import javax.swing.JLabel;
27  import javax.swing.JTable;
28  import javax.swing.UIManager;
29  import javax.swing.border.Border;
30  import javax.swing.border.EmptyBorder;
31  import javax.swing.table.TableCellRenderer;
32  
33  /**
34   * This is default date formatter for ObjectTable. It uses <code>
35   * SimpleDateFormat</code> to format the <code>Date</code> object. Format
36   * is specified as yyyy-MM-dd hh:mm:ss.SSS
37   * 
38   * @author <a href="mailto:ales.pucelj@cosylab.com">Ales Pucelj</a>  
39   * @version $id$
40   */
41  public class DateRenderer extends JLabel implements TableCellRenderer {
42  
43  	private static final long serialVersionUID = 1L;
44  
45  	private static final Border noFocusBorder = new EmptyBorder(1, 1, 1, 1);
46  
47  	private static final SimpleDateFormat dateFormatter =
48  		new SimpleDateFormat("yyyy'-'MM'-'dd' 'hh':'mm':'ss'.'SSS");
49  
50  	/**
51  	 * Constructor for DateFormatter.
52  	 */
53  	public DateRenderer() {
54  		super();
55  		setOpaque(true);
56  	}
57  
58  	/**
59  	 *  This method is sent to the renderer by the drawing table to
60  	 *  configure the renderer appropriately before drawing.  Return
61  	 *  the Component used for drawing.
62  	 *
63  	 * @param	table		the JTable that is asking the renderer to draw.
64  	 *				This parameter can be null.
65  	 * @param	value		the value of the cell to be rendered.  It is
66  	 *				up to the specific renderer to interpret
67  	 *				and draw the value.  eg. if value is the
68  	 *				String "true", it could be rendered as a
69  	 *				string or it could be rendered as a check
70  	 *				box that is checked.  null is a valid value.
71  	 * @param	isSelected	true is the cell is to be renderer with
72  	 *				selection highlighting
73  	 * @param	row	        the row index of the cell being drawn.  When
74  	 *				drawing the header the rowIndex is -1.
75  	 * @param	column	        the column index of the cell being drawn
76  	 */
77  	public Component getTableCellRendererComponent(
78  		JTable table,
79  		Object value,
80  		boolean isSelected,
81  		boolean hasFocus,
82  		int row,
83  		int column) {
84  
85  		if (isSelected) {
86  			setForeground(table.getSelectionForeground());
87  			setBackground(table.getSelectionBackground());
88  		} else {
89  			setForeground(table.getForeground());
90  			setBackground(table.getBackground());
91  		}
92  
93  		if (hasFocus) {
94  			setBorder(UIManager.getBorder("Table.focusCellHighlightBorder"));
95  			if (table.isCellEditable(row, column)) {
96  				setForeground(UIManager.getColor("Table.focusCellForeground"));
97  				setBackground(UIManager.getColor("Table.focusCellBackground"));
98  			}
99  		} else {
100 			setBorder(noFocusBorder);
101 		}
102 
103 		setFont(table.getFont());
104 
105 		if (value == null)
106 			return this;
107 
108 		setText(dateFormatter.format((Date) value));
109 
110 		return this;
111 	}
112 }