View Javadoc
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