猿问

约束用户在JTextField中输入时间的最佳方法

在我的一个Java应用程序中,有一个字段供用户输入时间。我知道,我可以简单地将其保持为正常状态,JTextField并且在验证时可以检查该值等等。

但是我认为有比这更好的方法了。

例如,如果这是一个有日期的问题,那么JXDatePickerswingx随带的)可以非常方便地使用。最终,用户选择可以保证是一个日期。

同样,也必须有更好的时间选择方式。如果您知道更好的解决方案,会有人分享您的知识。

任何想法表示赞赏。谢谢!


慕娘9325324
浏览 599回答 3
3回答

忽然笑

多个JSpinner实例允许选择小时,分钟和秒使用JFormattedTextField带有一些改进的可以提供立即的用户反馈(例如,输入无效后立即将背景涂成红色)

素胚勾勒不出你

我之前做了一个原型TimeField,它仍然需要一些工作,但是这个概念很基础。它基本上显示两个JTextFields,一个代表小时,一个代表分钟,并使它们看起来像一个字段。通过使用某些DocumentFilter,它限制了用户的输入。我前一段时间做过,它需要工作,但是基本思想在那里...如果您有问题,则需要自己尝试解决;)/** &nbsp;* &nbsp;*&nbsp;@author&nbsp;MadProgrammer &nbsp;*/public&nbsp;class&nbsp;TimeField&nbsp;extends&nbsp;javax.swing.JPanel&nbsp;{ &nbsp;&nbsp;//&nbsp;The&nbsp;time&nbsp;of&nbsp;day... &nbsp;&nbsp;public&nbsp;enum&nbsp;TimeOfDay&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;AM, &nbsp;&nbsp;&nbsp;&nbsp;PM&nbsp;&nbsp;} &nbsp;&nbsp;private&nbsp;HourDocumentFilter&nbsp;hourDocumentFilter; &nbsp;&nbsp;private&nbsp;MinuteDocumentFilter&nbsp;minDocumentFilter; &nbsp;&nbsp;private&nbsp;HourKeyHandler&nbsp;hourKeyHandler; &nbsp;&nbsp;private&nbsp;MinuteKeyHandler&nbsp;minuteKeyHandler; &nbsp;&nbsp;private&nbsp;HourFocusHandler&nbsp;hourFocusHandler; &nbsp;&nbsp;private&nbsp;MinuteFocusHandler&nbsp;minuteFocusHandler; &nbsp;&nbsp;private&nbsp;boolean&nbsp;use24HourClock; &nbsp;&nbsp;private&nbsp;ActionHandler&nbsp;actionHandler; &nbsp;&nbsp;/** &nbsp;&nbsp;&nbsp;*&nbsp;Creates&nbsp;new&nbsp;form&nbsp;TimeField &nbsp;&nbsp;&nbsp;*/ &nbsp;&nbsp;public&nbsp;TimeField()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;initComponents(); &nbsp;&nbsp;&nbsp;&nbsp;pnlFields.setBorder(new&nbsp;CompoundBorder(UIManager.getBorder("TextField.border"),new&nbsp;EmptyBorder(0,&nbsp;2,&nbsp;0,&nbsp;2))); &nbsp;&nbsp;&nbsp;&nbsp;set24HourClock(false); &nbsp;&nbsp;&nbsp;&nbsp;setTime(new&nbsp;Date()); &nbsp;&nbsp;&nbsp;&nbsp;fldHour.addKeyListener(new&nbsp;HourKeyHandler()); &nbsp;&nbsp;} &nbsp;&nbsp;@Override &nbsp;&nbsp;public&nbsp;void&nbsp;addNotify()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;super.addNotify(); &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Add&nbsp;all&nbsp;the&nbsp;required&nbsp;functionality&nbsp;to&nbsp;make&nbsp;this&nbsp;thing&nbsp;work... &nbsp;&nbsp;&nbsp;&nbsp;((AbstractDocument)&nbsp;fldHour.getDocument()).setDocumentFilter(getHourDocumentFilter()); &nbsp;&nbsp;&nbsp;&nbsp;((AbstractDocument)&nbsp;fldMin.getDocument()).setDocumentFilter(getMinuteDocumentFilter()); &nbsp;&nbsp;&nbsp;&nbsp;fldHour.addFocusListener(getHourFocusHandler()); &nbsp;&nbsp;&nbsp;&nbsp;fldMin.addFocusListener(getMinuteFocusHandler()); &nbsp;&nbsp;&nbsp;&nbsp;fldHour.addKeyListener(getHourKeyHandler()); &nbsp;&nbsp;&nbsp;&nbsp;fldMin.addKeyListener(getMinuteKeyHandler()); &nbsp;&nbsp;&nbsp;&nbsp;fldHour.addActionListener(getActionHandler()); &nbsp;&nbsp;&nbsp;&nbsp;fldMin.addActionListener(getActionHandler()); &nbsp;&nbsp;&nbsp;&nbsp;cmbTimeOfDay.addActionListener(getActionHandler()); &nbsp;&nbsp;} &nbsp;&nbsp;@Override &nbsp;&nbsp;public&nbsp;void&nbsp;removeNotify()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Clean&nbsp;up&nbsp;our&nbsp;listeners... &nbsp;&nbsp;&nbsp;&nbsp;((AbstractDocument)&nbsp;fldHour.getDocument()).setDocumentFilter(null); &nbsp;&nbsp;&nbsp;&nbsp;((AbstractDocument)&nbsp;fldMin.getDocument()).setDocumentFilter(null); &nbsp;&nbsp;&nbsp;&nbsp;fldHour.removeFocusListener(getHourFocusHandler()); &nbsp;&nbsp;&nbsp;&nbsp;fldMin.removeFocusListener(getMinuteFocusHandler()); &nbsp;&nbsp;&nbsp;&nbsp;fldHour.removeKeyListener(getHourKeyHandler()); &nbsp;&nbsp;&nbsp;&nbsp;fldMin.removeKeyListener(getMinuteKeyHandler()); &nbsp;&nbsp;&nbsp;&nbsp;fldHour.removeActionListener(getActionHandler()); &nbsp;&nbsp;&nbsp;&nbsp;fldMin.removeActionListener(getActionHandler()); &nbsp;&nbsp;&nbsp;&nbsp;cmbTimeOfDay.removeActionListener(getActionHandler()); &nbsp;&nbsp;&nbsp;&nbsp;super.removeNotify(); &nbsp;&nbsp;} &nbsp;&nbsp;/** &nbsp;&nbsp;&nbsp;*&nbsp;Adds&nbsp;an&nbsp;action&nbsp;listener&nbsp;to&nbsp;the&nbsp;component.&nbsp;Actions&nbsp;are&nbsp;fired&nbsp;when&nbsp;the&nbsp;user &nbsp;&nbsp;&nbsp;*&nbsp;presses&nbsp;the&nbsp;enter&nbsp;key &nbsp;&nbsp;&nbsp;* &nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;listener &nbsp;&nbsp;&nbsp;*/ &nbsp;&nbsp;public&nbsp;void&nbsp;addActionListener(ActionListener&nbsp;listener)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;listenerList.add(ActionListener.class,&nbsp;listener); &nbsp;&nbsp;} &nbsp;&nbsp;public&nbsp;void&nbsp;removeActionListener(ActionListener&nbsp;listener)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;listenerList.remove(ActionListener.class,&nbsp;listener); &nbsp;&nbsp;} &nbsp;&nbsp;/** &nbsp;&nbsp;&nbsp;*&nbsp;Returns&nbsp;the&nbsp;field&nbsp;that&nbsp;is&nbsp;acting&nbsp;as&nbsp;the&nbsp;hour&nbsp;editor &nbsp;&nbsp;&nbsp;* &nbsp;&nbsp;&nbsp;*&nbsp;@return &nbsp;&nbsp;&nbsp;*/ &nbsp;&nbsp;public&nbsp;JTextField&nbsp;getHourEditor()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;fldHour; &nbsp;&nbsp;} &nbsp;&nbsp;/** &nbsp;&nbsp;&nbsp;*&nbsp;Returns&nbsp;the&nbsp;field&nbsp;that&nbsp;is&nbsp;acting&nbsp;as&nbsp;the&nbsp;minute&nbsp;editor &nbsp;&nbsp;&nbsp;* &nbsp;&nbsp;&nbsp;*&nbsp;@return &nbsp;&nbsp;&nbsp;*/ &nbsp;&nbsp;public&nbsp;JTextField&nbsp;getMinuteEditor()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;fldMin; &nbsp;&nbsp;} &nbsp;&nbsp;/** &nbsp;&nbsp;&nbsp;*&nbsp;Returns&nbsp;the&nbsp;combo&nbsp;box&nbsp;that&nbsp;provides&nbsp;the&nbsp;time&nbsp;of&nbsp;day&nbsp;selection &nbsp;&nbsp;&nbsp;* &nbsp;&nbsp;&nbsp;*&nbsp;@return &nbsp;&nbsp;&nbsp;*/ &nbsp;&nbsp;public&nbsp;JComboBox&nbsp;getTimeOfDayEditor()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;cmbTimeOfDay; &nbsp;&nbsp;} &nbsp;&nbsp;/** &nbsp;&nbsp;&nbsp;*&nbsp;Returns&nbsp;the&nbsp;internal&nbsp;action&nbsp;handler.&nbsp;This&nbsp;handler&nbsp;monitors&nbsp;actions&nbsp;on&nbsp;the &nbsp;&nbsp;&nbsp;*&nbsp;individual&nbsp;components&nbsp;and&nbsp;merges&nbsp;them&nbsp;into&nbsp;one. &nbsp;&nbsp;&nbsp;* &nbsp;&nbsp;&nbsp;*&nbsp;@return &nbsp;&nbsp;&nbsp;*/ &nbsp;&nbsp;protected&nbsp;ActionHandler&nbsp;getActionHandler()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(actionHandler&nbsp;==&nbsp;null)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;actionHandler&nbsp;=&nbsp;new&nbsp;ActionHandler(); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;actionHandler; &nbsp;&nbsp;} &nbsp;&nbsp;/** &nbsp;&nbsp;&nbsp;*&nbsp;Returns&nbsp;the&nbsp;hour&nbsp;key&nbsp;listener &nbsp;&nbsp;&nbsp;* &nbsp;&nbsp;&nbsp;*&nbsp;@return &nbsp;&nbsp;&nbsp;*/ &nbsp;&nbsp;protected&nbsp;HourKeyHandler&nbsp;getHourKeyHandler()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(hourKeyHandler&nbsp;==&nbsp;null)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hourKeyHandler&nbsp;=&nbsp;new&nbsp;HourKeyHandler(); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;hourKeyHandler; &nbsp;&nbsp;} &nbsp;&nbsp;/** &nbsp;&nbsp;&nbsp;*&nbsp;Returns&nbsp;the&nbsp;minute&nbsp;key&nbsp;listener &nbsp;&nbsp;&nbsp;* &nbsp;&nbsp;&nbsp;*&nbsp;@return &nbsp;&nbsp;&nbsp;*/ &nbsp;&nbsp;protected&nbsp;MinuteKeyHandler&nbsp;getMinuteKeyHandler()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(minuteKeyHandler&nbsp;==&nbsp;null)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;minuteKeyHandler&nbsp;=&nbsp;new&nbsp;MinuteKeyHandler(); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;minuteKeyHandler; &nbsp;&nbsp;} &nbsp;&nbsp;/** &nbsp;&nbsp;&nbsp;*&nbsp;Returns&nbsp;the&nbsp;document&nbsp;filter&nbsp;used&nbsp;to&nbsp;filter&nbsp;the&nbsp;hour&nbsp;field &nbsp;&nbsp;&nbsp;* &nbsp;&nbsp;&nbsp;*&nbsp;@return &nbsp;&nbsp;&nbsp;*/ &nbsp;&nbsp;protected&nbsp;HourDocumentFilter&nbsp;getHourDocumentFilter()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(hourDocumentFilter&nbsp;==&nbsp;null)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hourDocumentFilter&nbsp;=&nbsp;new&nbsp;HourDocumentFilter(); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;hourDocumentFilter; &nbsp;&nbsp;} &nbsp;&nbsp;/** &nbsp;&nbsp;&nbsp;*&nbsp;Returns&nbsp;the&nbsp;document&nbsp;filter&nbsp;user&nbsp;to&nbsp;filter&nbsp;the&nbsp;minute&nbsp;field &nbsp;&nbsp;&nbsp;* &nbsp;&nbsp;&nbsp;*&nbsp;@return &nbsp;&nbsp;&nbsp;*/ &nbsp;&nbsp;protected&nbsp;MinuteDocumentFilter&nbsp;getMinuteDocumentFilter()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(minDocumentFilter&nbsp;==&nbsp;null)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;minDocumentFilter&nbsp;=&nbsp;new&nbsp;MinuteDocumentFilter(); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;minDocumentFilter; &nbsp;&nbsp;} &nbsp;&nbsp;/** &nbsp;&nbsp;&nbsp;*&nbsp;Returns&nbsp;the&nbsp;focus&nbsp;listener&nbsp;used&nbsp;to&nbsp;monitor&nbsp;the&nbsp;hour&nbsp;field &nbsp;&nbsp;&nbsp;* &nbsp;&nbsp;&nbsp;*&nbsp;@return &nbsp;&nbsp;&nbsp;*/ &nbsp;&nbsp;protected&nbsp;HourFocusHandler&nbsp;getHourFocusHandler()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(hourFocusHandler&nbsp;==&nbsp;null)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hourFocusHandler&nbsp;=&nbsp;new&nbsp;HourFocusHandler(); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;hourFocusHandler; &nbsp;&nbsp;} &nbsp;&nbsp;/** &nbsp;&nbsp;&nbsp;*&nbsp;Used&nbsp;the&nbsp;focus&nbsp;listener&nbsp;used&nbsp;to&nbsp;monitor&nbsp;the&nbsp;minute&nbsp;field &nbsp;&nbsp;&nbsp;* &nbsp;&nbsp;&nbsp;*&nbsp;@return &nbsp;&nbsp;&nbsp;*/ &nbsp;&nbsp;protected&nbsp;MinuteFocusHandler&nbsp;getMinuteFocusHandler()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(minuteFocusHandler&nbsp;==&nbsp;null)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;minuteFocusHandler&nbsp;=&nbsp;new&nbsp;MinuteFocusHandler(); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;minuteFocusHandler; &nbsp;&nbsp;} &nbsp;&nbsp;/** &nbsp;&nbsp;&nbsp;*&nbsp;Sets&nbsp;the&nbsp;time&nbsp;based&nbsp;on&nbsp;the&nbsp;supplied&nbsp;date &nbsp;&nbsp;&nbsp;* &nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;date &nbsp;&nbsp;&nbsp;*/ &nbsp;&nbsp;public&nbsp;void&nbsp;setTime(Date&nbsp;date)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;Calendar&nbsp;cal&nbsp;=&nbsp;Calendar.getInstance(); &nbsp;&nbsp;&nbsp;&nbsp;cal.setTime(date); &nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;hour&nbsp;=&nbsp;cal.get(Calendar.HOUR); &nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;min&nbsp;=&nbsp;cal.get(Calendar.MINUTE); &nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;dayPart&nbsp;=&nbsp;cal.get(Calendar.AM_PM); &nbsp;&nbsp;&nbsp;&nbsp;TimeOfDay&nbsp;timeOfDay&nbsp;=&nbsp;TimeOfDay.AM; &nbsp;&nbsp;&nbsp;&nbsp;switch&nbsp;(dayPart)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;Calendar.PM: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;timeOfDay&nbsp;=&nbsp;TimeOfDay.PM; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;setTime(hour,&nbsp;min,&nbsp;timeOfDay); &nbsp;&nbsp;} &nbsp;&nbsp;/** &nbsp;&nbsp;&nbsp;*&nbsp;Sets&nbsp;the&nbsp;time&nbsp;based&nbsp;on&nbsp;a&nbsp;24&nbsp;hour&nbsp;clock.&nbsp;The&nbsp;field&nbsp;does&nbsp;not&nbsp;need&nbsp;to&nbsp;be&nbsp;in&nbsp;24 &nbsp;&nbsp;&nbsp;*&nbsp;hour&nbsp;mode&nbsp;to&nbsp;use&nbsp;this&nbsp;method,&nbsp;the&nbsp;method&nbsp;will&nbsp;automatically&nbsp;correct&nbsp;the &nbsp;&nbsp;&nbsp;*&nbsp;hour&nbsp;appropriately. &nbsp;&nbsp;&nbsp;* &nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;hour &nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;min &nbsp;&nbsp;&nbsp;*/ &nbsp;&nbsp;public&nbsp;void&nbsp;setTime(int&nbsp;hour,&nbsp;int&nbsp;min)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;hour&nbsp;=&nbsp;correctHour(hour); &nbsp;&nbsp;&nbsp;&nbsp;min&nbsp;=&nbsp;correctMinute(min); &nbsp;&nbsp;&nbsp;&nbsp;TimeOfDay&nbsp;timeOfDay&nbsp;=&nbsp;TimeOfDay.AM; &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(hour&nbsp;>=&nbsp;12)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;timeOfDay&nbsp;=&nbsp;TimeOfDay.PM; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;setTime(hour,&nbsp;min,&nbsp;timeOfDay); &nbsp;&nbsp;} &nbsp;&nbsp;/** &nbsp;&nbsp;&nbsp;*&nbsp;Corrects&nbsp;the&nbsp;minute&nbsp;value&nbsp;to&nbsp;make&nbsp;sure&nbsp;it&nbsp;is&nbsp;within&nbsp;allowable&nbsp;ranges. &nbsp;&nbsp;&nbsp;* &nbsp;&nbsp;&nbsp;*&nbsp;For&nbsp;example,&nbsp;if&nbsp;you&nbsp;pass&nbsp;in&nbsp;90&nbsp;the&nbsp;method,&nbsp;it&nbsp;will&nbsp;automatically&nbsp;correct &nbsp;&nbsp;&nbsp;*&nbsp;the&nbsp;value&nbsp;to&nbsp;30,&nbsp;discard&nbsp;the&nbsp;overflow. &nbsp;&nbsp;&nbsp;* &nbsp;&nbsp;&nbsp;*&nbsp;This&nbsp;will&nbsp;not&nbsp;effect&nbsp;the&nbsp;hour&nbsp;value...although&nbsp;this&nbsp;might&nbsp;be&nbsp;worth &nbsp;&nbsp;&nbsp;*&nbsp;consideration&nbsp;in&nbsp;the&nbsp;future &nbsp;&nbsp;&nbsp;* &nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;min &nbsp;&nbsp;&nbsp;*&nbsp;@return &nbsp;&nbsp;&nbsp;*/ &nbsp;&nbsp;protected&nbsp;int&nbsp;correctMinute(int&nbsp;min)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Make&nbsp;sure&nbsp;the&nbsp;value&nbsp;is&nbsp;positive. &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;If&nbsp;we&nbsp;were&nbsp;interested&nbsp;in&nbsp;altering&nbsp;the&nbsp;hour&nbsp;value&nbsp;as&nbsp;well,&nbsp;we&nbsp;wouldn't &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;want&nbsp;to&nbsp;do&nbsp;this... &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(min&nbsp;<&nbsp;0)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;min&nbsp;+=&nbsp;(min&nbsp;*&nbsp;-2); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Correct&nbsp;the&nbsp;minute&nbsp;value.... &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(min&nbsp;>&nbsp;59)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;How&nbsp;many&nbsp;hours&nbsp;fit&nbsp;into&nbsp;this&nbsp;value &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;float&nbsp;part&nbsp;=&nbsp;min&nbsp;/&nbsp;60f; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;part&nbsp;=&nbsp;(float)&nbsp;(part&nbsp;-&nbsp;Math.floor(part));&nbsp;//&nbsp;Get&nbsp;remainder &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;min&nbsp;=&nbsp;(int)&nbsp;(60&nbsp;*&nbsp;part);&nbsp;//&nbsp;Calculate&nbsp;the&nbsp;number&nbsp;of&nbsp;minutes... &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;min; &nbsp;&nbsp;} &nbsp;&nbsp;/** &nbsp;&nbsp;&nbsp;*&nbsp;Basically,&nbsp;this&nbsp;method&nbsp;will&nbsp;attempt&nbsp;to&nbsp;correct&nbsp;the&nbsp;hour&nbsp;value&nbsp;and&nbsp;bring&nbsp;the &nbsp;&nbsp;&nbsp;*&nbsp;it&nbsp;into&nbsp;range&nbsp;of&nbsp;a&nbsp;single&nbsp;day. &nbsp;&nbsp;&nbsp;* &nbsp;&nbsp;&nbsp;*&nbsp;We&nbsp;are&nbsp;basically&nbsp;going&nbsp;to&nbsp;try&nbsp;and&nbsp;figure&nbsp;out&nbsp;how&nbsp;many&nbsp;parts&nbsp;of&nbsp;the&nbsp;day&nbsp;that &nbsp;&nbsp;&nbsp;*&nbsp;the&nbsp;hour&nbsp;falls&nbsp;in&nbsp;and&nbsp;make&nbsp;it&nbsp;equal&nbsp;to&nbsp;a&nbsp;single&nbsp;day... &nbsp;&nbsp;&nbsp;* &nbsp;&nbsp;&nbsp;*&nbsp;That&nbsp;is,&nbsp;if&nbsp;the&nbsp;hour&nbsp;is&nbsp;35,&nbsp;it's&nbsp;actually&nbsp;1.458...&nbsp;days,&nbsp;which&nbsp;is&nbsp;roughly&nbsp;1 &nbsp;&nbsp;&nbsp;*&nbsp;day&nbsp;and&nbsp;11&nbsp;hours.&nbsp;We&nbsp;are&nbsp;only&nbsp;interested&nbsp;in&nbsp;the&nbsp;11&nbsp;hours,&nbsp;cause&nbsp;the&nbsp;date&nbsp;is &nbsp;&nbsp;&nbsp;*&nbsp;irrelevant&nbsp;to&nbsp;us &nbsp;&nbsp;&nbsp;* &nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;hour &nbsp;&nbsp;&nbsp;*&nbsp;@return &nbsp;&nbsp;&nbsp;*/ &nbsp;&nbsp;protected&nbsp;int&nbsp;correctHour(int&nbsp;hour)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(hour&nbsp;<&nbsp;0)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hour&nbsp;+=&nbsp;(hour&nbsp;*&nbsp;-2); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(hour&nbsp;>&nbsp;23)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;float&nbsp;part&nbsp;=&nbsp;hour&nbsp;/&nbsp;24f; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;part&nbsp;=&nbsp;(float)&nbsp;(part&nbsp;-&nbsp;Math.floor(part)); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hour&nbsp;=&nbsp;(int)&nbsp;(24&nbsp;*&nbsp;part); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;hour; &nbsp;&nbsp;} &nbsp;&nbsp;/** &nbsp;&nbsp;&nbsp;*&nbsp;Sets&nbsp;the&nbsp;time&nbsp;value&nbsp;for&nbsp;this&nbsp;field... &nbsp;&nbsp;&nbsp;* &nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;hour &nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;min &nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;timeOfDay &nbsp;&nbsp;&nbsp;*/ &nbsp;&nbsp;public&nbsp;void&nbsp;setTime(int&nbsp;hour,&nbsp;int&nbsp;min,&nbsp;TimeOfDay&nbsp;timeOfDay)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;hour&nbsp;=&nbsp;correctHour(hour); &nbsp;&nbsp;&nbsp;&nbsp;min&nbsp;=&nbsp;correctMinute(min); &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Now&nbsp;that&nbsp;we&nbsp;have&nbsp;a&nbsp;correct&nbsp;hour&nbsp;value,&nbsp;we&nbsp;need&nbsp;to&nbsp;know&nbsp;if&nbsp;it&nbsp;will &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;actually&nbsp;fit&nbsp;within&nbsp;the&nbsp;correct&nbsp;part&nbsp;of&nbsp;the&nbsp;day... &nbsp;&nbsp;&nbsp;&nbsp;switch&nbsp;(timeOfDay)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;AM: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmbTimeOfDay.setSelectedIndex(0); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;PM: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmbTimeOfDay.setSelectedIndex(1); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!is24HourClock())&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(hour&nbsp;>&nbsp;12)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hour&nbsp;-=&nbsp;12; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(hour&nbsp;<&nbsp;12&nbsp;&&&nbsp;timeOfDay.equals(TimeOfDay.PM))&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hour&nbsp;+=&nbsp;12; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;fldHour.setText(pad(Integer.toString(hour),&nbsp;2)); &nbsp;&nbsp;&nbsp;&nbsp;fldMin.setText(pad(Integer.toString(min),&nbsp;2)); &nbsp;&nbsp;} &nbsp;&nbsp;public&nbsp;int&nbsp;getHour()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;Integer.parseInt(getHourEditor().getText()); &nbsp;&nbsp;} &nbsp;&nbsp;public&nbsp;int&nbsp;getMinute()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;Integer.parseInt(getMinuteEditor().getText()); &nbsp;&nbsp;} &nbsp;&nbsp;public&nbsp;TimeOfDay&nbsp;getTimeOfDay()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;TimeOfDay&nbsp;tod&nbsp;=&nbsp;null; &nbsp;&nbsp;&nbsp;&nbsp;switch&nbsp;(cmbTimeOfDay.getSelectedIndex())&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;0: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tod&nbsp;=&nbsp;TimeOfDay.AM; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;1: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tod&nbsp;=&nbsp;TimeOfDay.PM; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;tod; &nbsp;&nbsp;} &nbsp;&nbsp;/** &nbsp;&nbsp;&nbsp;*&nbsp;Sets&nbsp;if&nbsp;we&nbsp;should&nbsp;be&nbsp;using&nbsp;24&nbsp;or&nbsp;12&nbsp;hour&nbsp;clock.&nbsp;This&nbsp;basically&nbsp;configures &nbsp;&nbsp;&nbsp;*&nbsp;the&nbsp;time&nbsp;of&nbsp;day&nbsp;field&nbsp;and&nbsp;the&nbsp;validation&nbsp;ranges&nbsp;of&nbsp;the&nbsp;various&nbsp;fields &nbsp;&nbsp;&nbsp;* &nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;value &nbsp;&nbsp;&nbsp;*/ &nbsp;&nbsp;public&nbsp;void&nbsp;set24HourClock(boolean&nbsp;value)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(value&nbsp;!=&nbsp;use24HourClock)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;use24HourClock&nbsp;=&nbsp;value; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmbTimeOfDay.setVisible(!use24HourClock); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(cmbTimeOfDay.getSelectedIndex()&nbsp;==&nbsp;1)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setTime(getHour()&nbsp;+&nbsp;12,&nbsp;getMinute(),&nbsp;getTimeOfDay()); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;invalidate(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;firePropertyChange("24HourClock",&nbsp;!use24HourClock,&nbsp;value); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;} &nbsp;&nbsp;/** &nbsp;&nbsp;&nbsp;*&nbsp;Returns&nbsp;if&nbsp;this&nbsp;is&nbsp;using&nbsp;a&nbsp;24&nbsp;or&nbsp;12&nbsp;hour&nbsp;clock &nbsp;&nbsp;&nbsp;* &nbsp;&nbsp;&nbsp;*&nbsp;@return &nbsp;&nbsp;&nbsp;*/ &nbsp;&nbsp;public&nbsp;boolean&nbsp;is24HourClock()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;use24HourClock; &nbsp;&nbsp;} &nbsp;&nbsp;/** &nbsp;&nbsp;&nbsp;*&nbsp;This&nbsp;method&nbsp;is&nbsp;called&nbsp;from&nbsp;within&nbsp;the&nbsp;constructor&nbsp;to&nbsp;initialize&nbsp;the&nbsp;form. &nbsp;&nbsp;&nbsp;*&nbsp;WARNING:&nbsp;Do&nbsp;NOT&nbsp;modify&nbsp;this&nbsp;code.&nbsp;The&nbsp;content&nbsp;of&nbsp;this&nbsp;method&nbsp;is&nbsp;always &nbsp;&nbsp;&nbsp;*&nbsp;regenerated&nbsp;by&nbsp;the&nbsp;Form&nbsp;Editor. &nbsp;&nbsp;&nbsp;*/ &nbsp;&nbsp;@SuppressWarnings("unchecked") &nbsp;&nbsp;//&nbsp;<editor-fold&nbsp;defaultstate="collapsed"&nbsp;desc="Generated&nbsp;Code">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;private&nbsp;void&nbsp;initComponents()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;java.awt.GridBagConstraints&nbsp;gridBagConstraints; &nbsp;&nbsp;&nbsp;&nbsp;cmbTimeOfDay&nbsp;=&nbsp;new&nbsp;javax.swing.JComboBox(); &nbsp;&nbsp;&nbsp;&nbsp;pnlFields&nbsp;=&nbsp;new&nbsp;javax.swing.JPanel(); &nbsp;&nbsp;&nbsp;&nbsp;lblSeperator&nbsp;=&nbsp;new&nbsp;javax.swing.JLabel(); &nbsp;&nbsp;&nbsp;&nbsp;fldHour&nbsp;=&nbsp;new&nbsp;javax.swing.JTextField(); &nbsp;&nbsp;&nbsp;&nbsp;fldMin&nbsp;=&nbsp;new&nbsp;javax.swing.JTextField(); &nbsp;&nbsp;&nbsp;&nbsp;addFocusListener(new&nbsp;java.awt.event.FocusAdapter()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;focusGained(java.awt.event.FocusEvent&nbsp;evt)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;doFocusGained(evt); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;}); &nbsp;&nbsp;&nbsp;&nbsp;setLayout(new&nbsp;java.awt.GridBagLayout()); &nbsp;&nbsp;&nbsp;&nbsp;cmbTimeOfDay.setModel(new&nbsp;javax.swing.DefaultComboBoxModel(new&nbsp;String[]{"am",&nbsp;"pm"})); &nbsp;&nbsp;&nbsp;&nbsp;cmbTimeOfDay.setBorder(null); &nbsp;&nbsp;&nbsp;&nbsp;cmbTimeOfDay.setEditor(null); &nbsp;&nbsp;&nbsp;&nbsp;cmbTimeOfDay.setOpaque(false); &nbsp;&nbsp;&nbsp;&nbsp;gridBagConstraints&nbsp;=&nbsp;new&nbsp;java.awt.GridBagConstraints(); &nbsp;&nbsp;&nbsp;&nbsp;gridBagConstraints.gridx&nbsp;=&nbsp;1; &nbsp;&nbsp;&nbsp;&nbsp;gridBagConstraints.gridy&nbsp;=&nbsp;0; &nbsp;&nbsp;&nbsp;&nbsp;gridBagConstraints.insets&nbsp;=&nbsp;new&nbsp;java.awt.Insets(0,&nbsp;4,&nbsp;0,&nbsp;0); &nbsp;&nbsp;&nbsp;&nbsp;add(cmbTimeOfDay,&nbsp;gridBagConstraints); &nbsp;&nbsp;&nbsp;&nbsp;pnlFields.setBackground(new&nbsp;java.awt.Color(255,&nbsp;255,&nbsp;255)); &nbsp;&nbsp;&nbsp;&nbsp;pnlFields.setLayout(new&nbsp;java.awt.GridBagLayout()); &nbsp;&nbsp;&nbsp;&nbsp;lblSeperator.setText(":"); &nbsp;&nbsp;&nbsp;&nbsp;gridBagConstraints&nbsp;=&nbsp;new&nbsp;java.awt.GridBagConstraints(); &nbsp;&nbsp;&nbsp;&nbsp;gridBagConstraints.gridx&nbsp;=&nbsp;1; &nbsp;&nbsp;&nbsp;&nbsp;gridBagConstraints.gridy&nbsp;=&nbsp;0; &nbsp;&nbsp;&nbsp;&nbsp;gridBagConstraints.insets&nbsp;=&nbsp;new&nbsp;java.awt.Insets(0,&nbsp;2,&nbsp;0,&nbsp;2); &nbsp;&nbsp;&nbsp;&nbsp;pnlFields.add(lblSeperator,&nbsp;gridBagConstraints); &nbsp;&nbsp;&nbsp;&nbsp;fldHour.setBorder(null); &nbsp;&nbsp;&nbsp;&nbsp;fldHour.setColumns(2); &nbsp;&nbsp;&nbsp;&nbsp;gridBagConstraints&nbsp;=&nbsp;new&nbsp;java.awt.GridBagConstraints(); &nbsp;&nbsp;&nbsp;&nbsp;gridBagConstraints.gridx&nbsp;=&nbsp;0; &nbsp;&nbsp;&nbsp;&nbsp;gridBagConstraints.gridy&nbsp;=&nbsp;0; &nbsp;&nbsp;&nbsp;&nbsp;pnlFields.add(fldHour,&nbsp;gridBagConstraints); &nbsp;&nbsp;&nbsp;&nbsp;fldMin.setBorder(null); &nbsp;&nbsp;&nbsp;&nbsp;fldMin.setColumns(2); &nbsp;&nbsp;&nbsp;&nbsp;gridBagConstraints&nbsp;=&nbsp;new&nbsp;java.awt.GridBagConstraints(); &nbsp;&nbsp;&nbsp;&nbsp;gridBagConstraints.gridx&nbsp;=&nbsp;2; &nbsp;&nbsp;&nbsp;&nbsp;gridBagConstraints.gridy&nbsp;=&nbsp;0; &nbsp;&nbsp;&nbsp;&nbsp;pnlFields.add(fldMin,&nbsp;gridBagConstraints); &nbsp;&nbsp;&nbsp;&nbsp;gridBagConstraints&nbsp;=&nbsp;new&nbsp;java.awt.GridBagConstraints(); &nbsp;&nbsp;&nbsp;&nbsp;gridBagConstraints.gridx&nbsp;=&nbsp;0; &nbsp;&nbsp;&nbsp;&nbsp;gridBagConstraints.gridy&nbsp;=&nbsp;0; &nbsp;&nbsp;&nbsp;&nbsp;add(pnlFields,&nbsp;gridBagConstraints); &nbsp;&nbsp;}//&nbsp;</editor-fold>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;private&nbsp;void&nbsp;doFocusGained(java.awt.event.FocusEvent&nbsp;evt)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;fldHour.requestFocus(); &nbsp;&nbsp;} &nbsp;&nbsp;//&nbsp;Variables&nbsp;declaration&nbsp;-&nbsp;do&nbsp;not&nbsp;modify&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;private&nbsp;javax.swing.JComboBox&nbsp;cmbTimeOfDay; &nbsp;&nbsp;private&nbsp;javax.swing.JTextField&nbsp;fldHour; &nbsp;&nbsp;private&nbsp;javax.swing.JTextField&nbsp;fldMin; &nbsp;&nbsp;private&nbsp;javax.swing.JLabel&nbsp;lblSeperator; &nbsp;&nbsp;private&nbsp;javax.swing.JPanel&nbsp;pnlFields; &nbsp;&nbsp;//&nbsp;End&nbsp;of&nbsp;variables&nbsp;declaration&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;/** &nbsp;&nbsp;&nbsp;*&nbsp;Moves&nbsp;the&nbsp;focus&nbsp;forward&nbsp;to&nbsp;the&nbsp;next&nbsp;field. &nbsp;&nbsp;&nbsp;* &nbsp;&nbsp;&nbsp;*&nbsp;This&nbsp;is&nbsp;used&nbsp;to&nbsp;provide&nbsp;"automatic"&nbsp;focus&nbsp;movement &nbsp;&nbsp;&nbsp;*/ &nbsp;&nbsp;protected&nbsp;void&nbsp;moveFocusForward()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(fldHour.hasFocus())&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fldMin.requestFocus(); &nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;if&nbsp;(fldMin.hasFocus())&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmbTimeOfDay.requestFocus(); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;} &nbsp;&nbsp;/** &nbsp;&nbsp;&nbsp;*&nbsp;Moves&nbsp;the&nbsp;focus&nbsp;backwards&nbsp;to&nbsp;the&nbsp;previous&nbsp;field. &nbsp;&nbsp;&nbsp;* &nbsp;&nbsp;&nbsp;*&nbsp;This&nbsp;is&nbsp;used&nbsp;to&nbsp;provide&nbsp;"automatic"&nbsp;focus&nbsp;movement &nbsp;&nbsp;&nbsp;*/ &nbsp;&nbsp;protected&nbsp;void&nbsp;moveFocusBackward()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(fldMin.hasFocus())&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fldHour.requestFocus(); &nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;if&nbsp;(cmbTimeOfDay.hasFocus())&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fldMin.requestFocus(); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;} &nbsp;&nbsp;/** &nbsp;&nbsp;&nbsp;*&nbsp;Fires&nbsp;the&nbsp;action&nbsp;performed&nbsp;event&nbsp;to&nbsp;all&nbsp;registered&nbsp;listeners &nbsp;&nbsp;&nbsp;* &nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;evt &nbsp;&nbsp;&nbsp;*/ &nbsp;&nbsp;protected&nbsp;void&nbsp;fireActionPerformed(ActionEvent&nbsp;evt)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;List<ActionListener>&nbsp;lstListeners&nbsp;=&nbsp;Arrays.asList(listenerList.getListeners(ActionListener.class)); &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!lstListeners.isEmpty())&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Collections.reverse(lstListeners); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(ActionListener&nbsp;listener&nbsp;:&nbsp;lstListeners)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;listener.actionPerformed(evt); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;} &nbsp;&nbsp;/** &nbsp;&nbsp;&nbsp;*&nbsp;Hour&nbsp;key&nbsp;handler,&nbsp;used&nbsp;to&nbsp;monitor&nbsp;"special"&nbsp;keys&nbsp;for&nbsp;the&nbsp;hour&nbsp;field. &nbsp;&nbsp;&nbsp;* &nbsp;&nbsp;&nbsp;*&nbsp;This&nbsp;looks&nbsp;for&nbsp;the&nbsp;user&nbsp;pressing&nbsp;the&nbsp;":"&nbsp;key&nbsp;and&nbsp;the&nbsp;right&nbsp;arrow&nbsp;key&nbsp;in &nbsp;&nbsp;&nbsp;*&nbsp;order&nbsp;to&nbsp;perform&nbsp;special&nbsp;navigation &nbsp;&nbsp;&nbsp;*/ &nbsp;&nbsp;protected&nbsp;class&nbsp;HourKeyHandler&nbsp;extends&nbsp;KeyAdapter&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;@Override &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;keyPressed(KeyEvent&nbsp;e)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;boolean&nbsp;numLock&nbsp;=&nbsp;false; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Get&nbsp;the&nbsp;state&nbsp;of&nbsp;the&nbsp;nums&nbsp;lock &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;numLock&nbsp;=&nbsp;Toolkit.getDefaultToolkit().getLockingKeyState(KeyEvent.VK_NUM_LOCK); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(Exception&nbsp;exp)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Move&nbsp;focus&nbsp;forward&nbsp;if&nbsp;the&nbsp;user&nbsp;presses&nbsp;the&nbsp;":" &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(e.getKeyCode()&nbsp;==&nbsp;KeyEvent.VK_SEMICOLON&nbsp;&&&nbsp;e.isShiftDown())&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;moveFocusForward(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Move&nbsp;focus&nbsp;forward&nbsp;if&nbsp;the&nbsp;user&nbsp;pressed&nbsp;the&nbsp;left&nbsp;arrow&nbsp;key &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;if&nbsp;((e.getKeyCode()&nbsp;==&nbsp;KeyEvent.VK_NUMPAD6&nbsp;&&&nbsp;!numLock)&nbsp;||&nbsp;e.getKeyCode()&nbsp;==&nbsp;KeyEvent.VK_RIGHT)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;If&nbsp;we&nbsp;are&nbsp;in&nbsp;the&nbsp;last&nbsp;edit&nbsp;position &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(fldHour.getCaretPosition()&nbsp;>=&nbsp;2)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;moveFocusForward(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Or&nbsp;we&nbsp;are&nbsp;in&nbsp;the&nbsp;first&nbsp;edit&nbsp;position&nbsp;and&nbsp;the&nbsp;field&nbsp;only&nbsp;contains&nbsp;a&nbsp;single&nbsp;character &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;if&nbsp;(fldHour.getText().trim().length()&nbsp;==&nbsp;1&nbsp;&&&nbsp;fldHour.getCaretPosition()&nbsp;==&nbsp;1)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;moveFocusForward(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;} &nbsp;&nbsp;/** &nbsp;&nbsp;&nbsp;*&nbsp;Minute&nbsp;key&nbsp;handler,&nbsp;used&nbsp;to&nbsp;monitor&nbsp;"special"&nbsp;keys&nbsp;for&nbsp;the&nbsp;hour&nbsp;field. &nbsp;&nbsp;&nbsp;* &nbsp;&nbsp;&nbsp;*&nbsp;This&nbsp;looks&nbsp;for&nbsp;the&nbsp;user&nbsp;pressing&nbsp;the&nbsp;left&nbsp;arrow&nbsp;key&nbsp;in&nbsp;order&nbsp;to&nbsp;perform &nbsp;&nbsp;&nbsp;*&nbsp;special&nbsp;navigation &nbsp;&nbsp;&nbsp;*/ &nbsp;&nbsp;protected&nbsp;class&nbsp;MinuteKeyHandler&nbsp;extends&nbsp;KeyAdapter&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;@Override &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;keyPressed(KeyEvent&nbsp;e)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;boolean&nbsp;numLock&nbsp;=&nbsp;false; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;numLock&nbsp;=&nbsp;Toolkit.getDefaultToolkit().getLockingKeyState(KeyEvent.VK_NUM_LOCK); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(Exception&nbsp;exp)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;((e.getKeyCode()&nbsp;==&nbsp;KeyEvent.VK_NUMPAD4&nbsp;&&&nbsp;!numLock)&nbsp;||&nbsp;e.getKeyCode()&nbsp;==&nbsp;KeyEvent.VK_LEFT)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Only&nbsp;want&nbsp;to&nbsp;move&nbsp;backwards&nbsp;if&nbsp;we&nbsp;are&nbsp;at&nbsp;the&nbsp;first&nbsp;edit&nbsp;position &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(fldMin.getCaretPosition()&nbsp;==&nbsp;0)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;moveFocusBackward(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;} &nbsp;&nbsp;/** &nbsp;&nbsp;&nbsp;*&nbsp;Hour&nbsp;field&nbsp;focus&nbsp;handler.&nbsp;This&nbsp;watches&nbsp;for&nbsp;focus&nbsp;lost&nbsp;events&nbsp;a &nbsp;&nbsp;&nbsp;*&nbsp;automatically&nbsp;pads&nbsp;the&nbsp;field&nbsp;with&nbsp;a&nbsp;leading&nbsp;"0"&nbsp;if&nbsp;the&nbsp;field&nbsp;is&nbsp;only&nbsp;1 &nbsp;&nbsp;&nbsp;*&nbsp;character&nbsp;in&nbsp;length &nbsp;&nbsp;&nbsp;*/ &nbsp;&nbsp;protected&nbsp;class&nbsp;HourFocusHandler&nbsp;extends&nbsp;FocusAdapter&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;@Override &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;focusLost(FocusEvent&nbsp;e)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;text&nbsp;=&nbsp;fldHour.getText(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(text.length()&nbsp;<&nbsp;2)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text&nbsp;=&nbsp;pad(text,&nbsp;2); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fldHour.setText(text); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;} &nbsp;&nbsp;/** &nbsp;&nbsp;&nbsp;*&nbsp;Minute&nbsp;field&nbsp;focus&nbsp;handler,&nbsp;watches&nbsp;for&nbsp;focus&nbsp;lost&nbsp;events&nbsp;and&nbsp;automatically &nbsp;&nbsp;&nbsp;*&nbsp;adds&nbsp;a&nbsp;"0"&nbsp;to&nbsp;the&nbsp;end&nbsp;of&nbsp;the&nbsp;field&nbsp;if&nbsp;it&nbsp;is&nbsp;only&nbsp;1&nbsp;character&nbsp;in&nbsp;length &nbsp;&nbsp;&nbsp;*/ &nbsp;&nbsp;protected&nbsp;class&nbsp;MinuteFocusHandler&nbsp;extends&nbsp;FocusAdapter&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;@Override &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;focusLost(FocusEvent&nbsp;e)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;text&nbsp;=&nbsp;fldMin.getText(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(text.length()&nbsp;<&nbsp;2)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fldMin.setText(text&nbsp;+&nbsp;"0"); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;} &nbsp;&nbsp;/** &nbsp;&nbsp;&nbsp;*&nbsp;The&nbsp;document&nbsp;filter&nbsp;used&nbsp;to&nbsp;filter&nbsp;the&nbsp;hour&nbsp;field. &nbsp;&nbsp;&nbsp;*/ &nbsp;&nbsp;protected&nbsp;class&nbsp;HourDocumentFilter&nbsp;extends&nbsp;DocumentFilter&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;@Override &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;insertString(FilterBypass&nbsp;fb,&nbsp;int&nbsp;offset,&nbsp;String&nbsp;text,&nbsp;AttributeSet&nbsp;attr)&nbsp;throws&nbsp;BadLocationException&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("insert:&nbsp;offset&nbsp;=&nbsp;"&nbsp;+&nbsp;offset&nbsp;+&nbsp;";&nbsp;text&nbsp;=&nbsp;"&nbsp;+&nbsp;text); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;super.insertString(fb,&nbsp;offset,&nbsp;text,&nbsp;attr); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;@Override &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;replace(FilterBypass&nbsp;fb,&nbsp;int&nbsp;offset,&nbsp;int&nbsp;length,&nbsp;String&nbsp;text,&nbsp;AttributeSet&nbsp;attrs)&nbsp;throws&nbsp;BadLocationException&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;boolean&nbsp;isAcceptable&nbsp;=&nbsp;false; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;boolean&nbsp;passOnFocus&nbsp;=&nbsp;false; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;strLength&nbsp;=&nbsp;text.length(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;We&nbsp;convert&nbsp;the&nbsp;value&nbsp;here&nbsp;to&nbsp;make&nbsp;sure&nbsp;it's&nbsp;a&nbsp;number... &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;value&nbsp;=&nbsp;Integer.parseInt(text); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;If&nbsp;the&nbsp;length&nbsp;of&nbsp;the&nbsp;string&nbsp;been&nbsp;replaced&nbsp;is&nbsp;only&nbsp;1&nbsp;character &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(strLength&nbsp;==&nbsp;1)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;If&nbsp;we&nbsp;are&nbsp;at&nbsp;the&nbsp;start&nbsp;of&nbsp;the&nbsp;editing&nbsp;position &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(offset&nbsp;==&nbsp;0)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;What&nbsp;clock&nbsp;type&nbsp;are&nbsp;we&nbsp;using... &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!is24HourClock())&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;only&nbsp;accept&nbsp;0&nbsp;or&nbsp;1... &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(value&nbsp;<=&nbsp;1)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;isAcceptable&nbsp;=&nbsp;true; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;if&nbsp;(value&nbsp;<=&nbsp;2)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;isAcceptable&nbsp;=&nbsp;true; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;If&nbsp;we&nbsp;are&nbsp;at&nbsp;the&nbsp;second&nbsp;editing&nbsp;position &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;if&nbsp;(offset&nbsp;==&nbsp;1)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Get&nbsp;the&nbsp;preceeding&nbsp;value,&nbsp;should&nbsp;be&nbsp;0,&nbsp;1&nbsp;or&nbsp;2 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;upperPart&nbsp;=&nbsp;fb.getDocument().getText(0,&nbsp;1); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Convert&nbsp;the&nbsp;value&nbsp;to&nbsp;an&nbsp;int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;upperValue&nbsp;=&nbsp;Integer.parseInt(upperPart); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;The&nbsp;acceptable&nbsp;range&nbsp;of&nbsp;values&nbsp;for&nbsp;the&nbsp;given&nbsp;position &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;lowerRange&nbsp;=&nbsp;0; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;upperRange&nbsp;=&nbsp;9; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Which&nbsp;clock&nbsp;are&nbsp;we&nbsp;using &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(is24HourClock())&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;If&nbsp;the&nbsp;first&nbsp;value&nbsp;is&nbsp;2,&nbsp;we&nbsp;can&nbsp;only&nbsp;accept&nbsp;values&nbsp;from&nbsp;0-3&nbsp;(20-23) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(upperValue&nbsp;==&nbsp;2)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;upperRange&nbsp;=&nbsp;3; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;12&nbsp;hour&nbsp;clock &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;If&nbsp;the&nbsp;first&nbsp;value&nbsp;is&nbsp;1,&nbsp;we&nbsp;can&nbsp;only&nbsp;accept&nbsp;values&nbsp;from&nbsp;0-2&nbsp;(10-12) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(upperValue&nbsp;==&nbsp;1)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;upperRange&nbsp;=&nbsp;2; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Is&nbsp;the&nbsp;value&nbsp;within&nbsp;accpetable&nbsp;range... &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(value&nbsp;>=&nbsp;lowerRange&nbsp;&&&nbsp;value&nbsp;<=&nbsp;upperRange)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;isAcceptable&nbsp;=&nbsp;true; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Pass&nbsp;on&nbsp;focus&nbsp;(only&nbsp;if&nbsp;the&nbsp;value&nbsp;is&nbsp;accepted) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;passOnFocus&nbsp;=&nbsp;true; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;First,&nbsp;we&nbsp;need&nbsp;to&nbsp;trim&nbsp;the&nbsp;value&nbsp;down&nbsp;to&nbsp;a&nbsp;maximum&nbsp;of&nbsp;2&nbsp;characters &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Need&nbsp;to&nbsp;know&nbsp;at&nbsp;what&nbsp;offest... &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;2&nbsp;-&nbsp;offset.. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;offset&nbsp;==&nbsp;0,&nbsp;length&nbsp;=&nbsp;2&nbsp;-&nbsp;offset&nbsp;=&nbsp;2 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;offset&nbsp;==&nbsp;1,&nbsp;length&nbsp;=&nbsp;2&nbsp;-&nbsp;offset&nbsp;=&nbsp;1 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strLength&nbsp;=&nbsp;2&nbsp;-&nbsp;offset; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;timeText&nbsp;=&nbsp;text.substring(offset,&nbsp;strLength); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value&nbsp;=&nbsp;Integer.parseInt(timeText); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;this&nbsp;will&nbsp;only&nbsp;work&nbsp;if&nbsp;we&nbsp;are&nbsp;using&nbsp;a&nbsp;24&nbsp;hour&nbsp;clock &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(value&nbsp;>=&nbsp;0&nbsp;&&&nbsp;value&nbsp;<=&nbsp;23)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(value&nbsp;>&nbsp;12&nbsp;&&&nbsp;is24HourClock())&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value&nbsp;-=&nbsp;12; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Pad&nbsp;out&nbsp;the&nbsp;text&nbsp;if&nbsp;required &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text&nbsp;=&nbsp;pad(value,&nbsp;2); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;isAcceptable&nbsp;=&nbsp;true; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(isAcceptable)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;super.replace(fb,&nbsp;offset,&nbsp;length,&nbsp;text,&nbsp;attrs); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(passOnFocus)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;moveFocusForward(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(NumberFormatException&nbsp;exp)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;} &nbsp;&nbsp;/** &nbsp;&nbsp;&nbsp;*&nbsp;The&nbsp;document&nbsp;filter&nbsp;used&nbsp;to&nbsp;filter&nbsp;the&nbsp;minute&nbsp;field. &nbsp;&nbsp;&nbsp;*/ &nbsp;&nbsp;protected&nbsp;class&nbsp;MinuteDocumentFilter&nbsp;extends&nbsp;DocumentFilter&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;@Override &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;insertString(FilterBypass&nbsp;fb,&nbsp;int&nbsp;offset,&nbsp;String&nbsp;text,&nbsp;AttributeSet&nbsp;attr)&nbsp;throws&nbsp;BadLocationException&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("insert:&nbsp;offset&nbsp;=&nbsp;"&nbsp;+&nbsp;offset&nbsp;+&nbsp;";&nbsp;text&nbsp;=&nbsp;"&nbsp;+&nbsp;text); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;super.insertString(fb,&nbsp;offset,&nbsp;text,&nbsp;attr); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;@Override &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;replace(FilterBypass&nbsp;fb,&nbsp;int&nbsp;offset,&nbsp;int&nbsp;length,&nbsp;String&nbsp;text,&nbsp;AttributeSet&nbsp;attrs)&nbsp;throws&nbsp;BadLocationException&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;boolean&nbsp;isAcceptable&nbsp;=&nbsp;false; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;boolean&nbsp;passOnFocus&nbsp;=&nbsp;false; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;How&nbsp;long&nbsp;is&nbsp;the&nbsp;text&nbsp;been&nbsp;added &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;strLength&nbsp;=&nbsp;text.length(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Convert&nbsp;the&nbsp;value&nbsp;to&nbsp;an&nbsp;integer&nbsp;now&nbsp;and&nbsp;save&nbsp;us&nbsp;the&nbsp;hassel &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;value&nbsp;=&nbsp;Integer.parseInt(text); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;If&nbsp;the&nbsp;length&nbsp;is&nbsp;only&nbsp;1,&nbsp;probably&nbsp;a&nbsp;new&nbsp;character&nbsp;has&nbsp;been&nbsp;added &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(strLength&nbsp;==&nbsp;1)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;The&nbsp;valid&nbsp;range&nbsp;of&nbsp;values&nbsp;we&nbsp;can&nbsp;accept &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;upperRange&nbsp;=&nbsp;9; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;lowerRange&nbsp;=&nbsp;0; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(offset&nbsp;==&nbsp;0)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;If&nbsp;we&nbsp;are&nbsp;at&nbsp;the&nbsp;first&nbsp;edit&nbsp;position,&nbsp;we&nbsp;can&nbsp;only&nbsp;accept&nbsp;values &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;from&nbsp;0-5&nbsp;(50&nbsp;minutes&nbsp;that&nbsp;is) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;upperRange&nbsp;=&nbsp;5; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;if&nbsp;(offset&nbsp;==&nbsp;1)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Second&nbsp;edit&nbsp;position... &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Every&nbsp;thing&nbsp;is&nbsp;valid&nbsp;here... &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;We&nbsp;want&nbsp;to&nbsp;pass&nbsp;on&nbsp;focus&nbsp;if&nbsp;the&nbsp;clock&nbsp;is&nbsp;in&nbsp;12&nbsp;hour&nbsp;mode &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;passOnFocus&nbsp;=&nbsp;!is24HourClock(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Is&nbsp;the&nbsp;value&nbsp;acceptable.. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(value&nbsp;>=&nbsp;lowerRange&nbsp;&&&nbsp;value&nbsp;<=&nbsp;upperRange)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;isAcceptable&nbsp;=&nbsp;true; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Basically,&nbsp;we&nbsp;are&nbsp;going&nbsp;to&nbsp;trim&nbsp;the&nbsp;value&nbsp;down&nbsp;to&nbsp;at&nbsp;max&nbsp;2&nbsp;characters &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Need&nbsp;to&nbsp;know&nbsp;at&nbsp;what&nbsp;offest... &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;2&nbsp;-&nbsp;offset.. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;offset&nbsp;==&nbsp;0,&nbsp;length&nbsp;=&nbsp;2&nbsp;-&nbsp;offset&nbsp;=&nbsp;2 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;offset&nbsp;==&nbsp;1,&nbsp;length&nbsp;=&nbsp;2&nbsp;-&nbsp;offset&nbsp;=&nbsp;1 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strLength&nbsp;=&nbsp;2&nbsp;-&nbsp;offset; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;timeText&nbsp;=&nbsp;text.substring(offset,&nbsp;strLength); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value&nbsp;=&nbsp;Integer.parseInt(timeText); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(value&nbsp;>=&nbsp;0&nbsp;&&&nbsp;value&nbsp;<=&nbsp;59)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Pad&nbsp;out&nbsp;the&nbsp;value&nbsp;as&nbsp;required &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text&nbsp;=&nbsp;pad(value,&nbsp;2); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;isAcceptable&nbsp;=&nbsp;true; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(isAcceptable)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;super.replace(fb,&nbsp;offset,&nbsp;length,&nbsp;text,&nbsp;attrs); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(passOnFocus)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;moveFocusForward(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(NumberFormatException&nbsp;exp)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;} &nbsp;&nbsp;/** &nbsp;&nbsp;&nbsp;*&nbsp;This&nbsp;is&nbsp;a&nbsp;simple&nbsp;"pass"&nbsp;on&nbsp;action&nbsp;handler... &nbsp;&nbsp;&nbsp;*/ &nbsp;&nbsp;protected&nbsp;class&nbsp;ActionHandler&nbsp;implements&nbsp;ActionListener&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;@Override &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;actionPerformed(ActionEvent&nbsp;e)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ActionEvent&nbsp;evt&nbsp;=&nbsp;new&nbsp;ActionEvent(TimeField.this,&nbsp;e.getID(),&nbsp;e.getActionCommand(),&nbsp;e.getModifiers()); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fireActionPerformed(evt); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;} &nbsp;&nbsp;public&nbsp;static&nbsp;String&nbsp;pad(long&nbsp;lValue,&nbsp;int&nbsp;iMinLength)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;pad(Long.toString(lValue),&nbsp;2); &nbsp;&nbsp;} &nbsp;&nbsp;public&nbsp;static&nbsp;String&nbsp;pad(int&nbsp;iValue,&nbsp;int&nbsp;iMinLength)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;pad(Integer.toString(iValue),&nbsp;iMinLength); &nbsp;&nbsp;} &nbsp;&nbsp;public&nbsp;static&nbsp;String&nbsp;pad(String&nbsp;sValue,&nbsp;int&nbsp;iMinLength)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;StringBuilder&nbsp;sb&nbsp;=&nbsp;new&nbsp;StringBuilder(iMinLength); &nbsp;&nbsp;&nbsp;&nbsp;sb.append(sValue); &nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(sb.length()&nbsp;<&nbsp;iMinLength)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.insert(0,&nbsp;"0"); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;sb.toString(); &nbsp;&nbsp;}}给定DavidKroukamp的简单解决方案,为什么有人应该选择上述笨重的实现。另外,手动输入数字时也会出现一些错误。我更喜欢DavidKroukamp的方式。简单的答案,验证。&nbsp;JFormattedTextField没有有效的值,而只是限制了事实,你可以输入数字,你可以很容易地进入99:99到一个JFormattedTextField。此实现的目的是提供实时验证,同时提供简单的数据输入要求
随时随地看视频慕课网APP

相关分类

Java
我要回答