1 package org.xpcards.components;
2
3 import java.text.DateFormat;
4 import java.text.ParseException;
5 import java.util.Date;
6
7 import org.eclipse.swt.SWT;
8 import org.eclipse.swt.events.ControlAdapter;
9 import org.eclipse.swt.events.ControlEvent;
10 import org.eclipse.swt.events.DisposeEvent;
11 import org.eclipse.swt.events.DisposeListener;
12 import org.eclipse.swt.events.FocusAdapter;
13 import org.eclipse.swt.events.FocusEvent;
14 import org.eclipse.swt.events.KeyAdapter;
15 import org.eclipse.swt.events.KeyEvent;
16 import org.eclipse.swt.graphics.Point;
17 import org.eclipse.swt.layout.FillLayout;
18 import org.eclipse.swt.widgets.Composite;
19 import org.eclipse.swt.widgets.Display;
20 import org.eclipse.swt.widgets.Shell;
21 import org.eclipse.swt.widgets.Text;
22
23 public class DatePicker extends Composite {
24
25 private DateFormat defaultDateFormat = null;
26 // private Calendar calendar = null;
27 private Text text = null;
28 private DateFormat dateFormat = null;
29 private Date date = null;
30
31 public DatePicker(Composite parent, int style) {
32 super(parent, style & ( SWT.READ_ONLY | SWT.FLAT ) );
33
34 int textStyle = SWT.NONE;
35 textStyle |= SWT.BORDER & style;
36
37 text = new Text(this, textStyle );
38
39 text.addKeyListener(new KeyAdapter() {
40
41 public void keyReleased(KeyEvent e) {
42 // System.err.println("Key pressed:" + e.keyCode);
43 if (e.keyCode == 27) {
44 // ESC Key
45 cancelled();
46 } else if (e.keyCode == 13) {
47 // OK Key
48 approved();
49 }
50 }
51 });
52
53 text.addFocusListener(new FocusAdapter() {
54 public void focusGained(FocusEvent e) {
55 text.setFocus();
56 }
57 /* (non-Javadoc)
58 * @see org.eclipse.swt.events.FocusAdapter#focusLost(org.eclipse.swt.events.FocusEvent)
59 */
60 public void focusLost(FocusEvent e) {
61 cancelled();
62 }
63
64 });
65
66 addControlListener(new ControlAdapter() {
67 public void controlResized(ControlEvent e) {
68 DatePicker.this.controlResized(e);
69 }
70
71 });
72
73 }
74
75 private void controlResized(ControlEvent e) {
76 Point tExtent = text.computeSize(SWT.DEFAULT, SWT.DEFAULT, false);
77 text.setBounds(0, 0, tExtent.x, tExtent.y);
78 }
79
80 private void approved() {
81 // System.err.println("Approved");
82 if ( text.getText().length() == 0 ) {
83 setDate(null);
84 return;
85 }
86 DateFormat df = getDateFormat();
87 if (df == null) {
88 if (defaultDateFormat == null) {
89 defaultDateFormat =
90 DateFormat.getDateInstance(DateFormat.SHORT);
91 }
92 df = defaultDateFormat;
93 }
94 try {
95 Date dt = df.parse(text.getText());
96 // System.err.println("Set date:" + dt);
97 setDate(dt);
98 } catch (ParseException e) {
99 resetText();
100 }
101 }
102
103 private void cancelled() {
104 resetText();
105 }
106
107 // public Calendar getCalendar() {
108 // if ( calendar == null ) {
109 // calendar = new GregorianCalendar();
110 // }
111 // return calendar;
112 // }
113
114 // public void setCalendar(Calendar calendar) {
115 // if (this.calendar != null) {
116 // Date dt = getDate();
117 // this.calendar = calendar;
118 // if (dt != null) {
119 // this.calendar.setTime(dt);
120 // }
121 // } else {
122 // this.calendar = calendar;
123 // }
124 // resetText(getDate());
125 // }
126
127 public void setDate(Date date) {
128 this.date = date;
129 // if (date != null && getCalendar() != null) {
130 // getCalendar().setTime(date);
131 // }
132 resetText();
133 }
134
135 private void resetText() {
136 if (date == null) {
137 text.setText("");
138 } else {
139 DateFormat df = getDateFormat();
140 if (df == null) {
141 if (defaultDateFormat == null) {
142 defaultDateFormat =
143 DateFormat.getDateInstance(DateFormat.SHORT);
144 }
145 df = defaultDateFormat;
146 }
147 text.setText(df.format(date));
148 }
149 }
150
151 public Point computeSize(int wHint, int hHint, boolean changed) {
152
153 Point tExtent = text.computeSize(SWT.DEFAULT, SWT.DEFAULT, false);
154 int width = tExtent.x;
155 int height = tExtent.y;
156
157 if (wHint != SWT.DEFAULT)
158 width = wHint;
159
160 if (hHint != SWT.DEFAULT)
161 height = hHint;
162
163 return new Point(width, height);
164 }
165
166 public Date getDate() {
167 return date;
168 }
169
170 /***
171 * @return
172 */
173 public DateFormat getDateFormat() {
174 return dateFormat;
175 }
176
177 /***
178 * @param format
179 */
180 public void setDateFormat(DateFormat format) {
181 if (this.dateFormat != format) {
182 dateFormat = format;
183 resetText();
184 }
185 }
186
187 public static void main(String[] args) {
188 Display display = new Display();
189 Shell shell = new Shell(display);
190 shell.setLayout(new FillLayout());
191
192 final DatePicker cal = new DatePicker(shell, SWT.NONE);
193 cal.setDate(new Date());
194
195 cal.addDisposeListener(new DisposeListener() {
196 public void widgetDisposed(DisposeEvent e) {
197 System.err.println("Date selected 1" + cal.getDate());
198 }
199 });
200
201 final DatePicker cal1 = new DatePicker(shell, SWT.BORDER);
202 cal1.setDate(new Date());
203
204 cal1.addDisposeListener(new DisposeListener() {
205 public void widgetDisposed(DisposeEvent e) {
206 System.err.println("Date selected 2" + cal1.getDate());
207 }
208 });
209
210
211 shell.pack();
212 shell.open();
213 while (!shell.isDisposed()) {
214 if (!display.readAndDispatch())
215 display.sleep();
216 }
217
218 }
219
220 }
This page was automatically generated by Maven