1 package org.columba.calendar.ui.comp; 19 20 import java.awt.Event ; 21 import java.awt.event.ActionEvent ; 22 import java.awt.event.ActionListener ; 23 import java.util.regex.Matcher ; 24 import java.util.regex.Pattern ; 25 26 import javax.swing.JComboBox ; 27 28 public class TimePicker extends JComboBox { 29 30 int hour; 31 32 int minutes; 33 34 final static String defaultValue = "00:00"; 35 36 public TimePicker() { 37 38 for (int i = 0; i <= 23; i++) { 39 addItem(i + ":00"); 40 addItem(i + ":15"); 41 addItem(i + ":30"); 42 addItem(i + ":45"); 43 } 44 45 hour = 0; 46 minutes = 0; 47 48 setSelectedItem("00:00"); 49 50 setEditable(true); 51 52 addActionListener(new ActionListener () { 53 54 public void actionPerformed(ActionEvent arg0) { 55 if (arg0.getActionCommand().equals("comboBoxChanged")) { 56 TimePicker.this.setSelectedItem(validateInput((String ) getSelectedItem())); 57 } else if (arg0.getActionCommand().equals("comboBoxEdited")) { 58 TimePicker.this.setSelectedItem(validateInput((String ) getSelectedItem())); 59 } 60 } 61 62 }); 63 64 } 65 66 public static String validateInput(String value) { 67 68 boolean valid = value.matches("[0-2][0-9]:[0-5][0-9]"); 70 71 if (valid) 72 return value; 73 74 if (value.indexOf(":") > -1) { 75 String before = value.substring(0, value.indexOf(":")); 77 int iBefore = -1; 78 int iAfter = -1; 79 try { 80 int testBefore = Integer.parseInt(before); 81 if ((testBefore > -1) && (testBefore < 24)) { 82 iBefore = testBefore; 84 } 85 } catch (NumberFormatException e) { 86 return defaultValue; 87 } 88 89 String after = value.substring(value.indexOf(":") + 1); 91 try { 92 int testAfter = Integer.parseInt(after); 93 if ((testAfter > -1) && (testAfter < 60)) { 94 iAfter = testAfter; 96 } 97 } catch (NumberFormatException e) { 98 return defaultValue; 99 } 100 101 if ((iBefore < 0) || (iAfter < 0)) 102 return defaultValue; 103 104 String correctedValue = ""; 105 if (iBefore < 10) 107 correctedValue += "0"; 108 correctedValue += iBefore + ":"; 109 if (iAfter < 10) 110 correctedValue += "0"; 111 correctedValue += iAfter; 112 return correctedValue; 113 } 114 115 try { 117 int iValue = Integer.parseInt(value); 118 if (iValue > -1) { 119 if (iValue < 10) { 120 return "0" + iValue + ":00"; 121 } else if (iValue < 24) { 122 return iValue + ":00"; 123 } 124 } 125 return defaultValue; 127 } catch (NumberFormatException e) { 128 return defaultValue; 129 } 130 } 131 132 public int getHour() { 133 String value = (String ) getSelectedItem(); 134 int h = Integer.parseInt(value.substring(0, value.indexOf(":"))); 135 136 return h; 137 } 138 139 public int getMinutes() { 140 String value = (String ) getSelectedItem(); 141 142 int m = Integer.parseInt(value.substring(value.indexOf(":")+1, value.length())); 143 144 return m; 145 } 146 147 public void setTime(int hour, int minutes) { 148 149 StringBuffer buf = new StringBuffer (); 150 buf.append(hour); 151 buf.append(":"); 152 if ( minutes == 0) 154 buf.append("00"); 155 else 156 buf.append(minutes); 157 158 setSelectedItem(buf.toString()); 159 } 160 161 } 162 | Popular Tags |